Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Erro de Encoding UTF-8 utilizando o Filtro do Spring Security

Pessoal

Alguém teve problemas de Encoding ao colocar o Spring Security? Fiz uma aplicação baseada nas configurações feitas no projeto e funciona super bem sem o Filtro do Security. Depois de ativar, todas as requisições não são encaminhadas com o Encoding correto. Meus dados são salvos na base de dados com o Encoding errado.

Já verifiquei e todos os meus meus arquivos estão com text file UTF-8, estou com as tags devidamente registradas nas JSPs:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

Todas as páginas também tem a meta

<meta charset="utf-8">

Quanto a configuração do Spring considerando Encoding, uso apenas essa que trata dos locales:

@Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("/WEB-INF/message");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(1);
        return messageSource;
    }

Existe alguma configuração que poder ser feita na classe SpringSecurityFilterConfiguration ou SecurityConfiguration para forçar o uso do Encoding?

Obrgado =D

5 respostas

Verifiquei também que a Servlet tem o seguinte filtro cadastrado:

@Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
        encodingFilter.setEncoding("UTF-8");
        return new Filter[] { encodingFilter };
    }

Mas também não funciona

Fala Manoel, tudo bem ?

Já vi uma vez acontecer esse problema. É necessário registrar o characterEncodingFilter no filterChain.

Na classe que implementa o initializer da web app, tente o seguinte:

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        FilterRegistration.Dynamic encodingFilter = servletContext.addFilter("encoding-filter",
                new CharacterEncodingFilter());
        encodingFilter.setInitParameter("encoding", "UTF-8");
        encodingFilter.setInitParameter("forceEncoding", "true");
        encodingFilter.addMappingForUrlPatterns(null, true, "/*");
    }

Olá, Rafael

Valeu pela dica. Achei algo estranho. A classe do projeto desse curso - ServletSpringMVC - "extends" de AbstractAnnotationConfigDispatcherServletInitializer. Ela não tem o método onStartup para ser sobrescrito.

solução!

Eu tive o mesmo problema quando adicionei o filter do spring e esta solução não me ajudou, mas consegui uma outra solução adicionando o filtro diretamente no HttpSecurity. @Override protected void configure(HttpSecurity http) throws Exception { CharacterEncodingFilter filter = new CharacterEncodingFilter(); filter.setEncoding("UTF-8"); filter.setForceEncoding(true); http.addFilterBefore(filter, CsrfFilter.class); }

Opa!

Agora sim deu certinho. Muito obrigado, Ronaldo. Quebrou um galho aqui. O método configure é exatamente onde declaramos as permissões para os usuários do sistema. Ajudou bastante. Um abração para o Ronaldo pela dica também.