CharacterEncodingFilter non funziona con Spring Security 3.2.0

Sono nuovo nel framework Spring MVC e ho un problema che non riesco a risolvere da solo. Tutto è iniziato quando ho integrato la sicurezza Spring con la mia applicazione, dopo che tutti i valori Unicode del modulo HTML non erano codificati (la sicurezza Spring funziona correttamente). Sono giunto alla conclusione che ciò sta accadendo probabilmente perché il mio DelegatingFilterProxy è chiamato come il primo filtro della catena.

Ecco la mia configurazione che pensavo funzionasse, ma non è così:

1) Sto estendendo AbstractSecurityWebApplicationInitializer – da javadoc:

 Registers the DelegatingFilterProxy to use the springSecurityFilterChain() before any other registered Filter. 

Da quella class sovrascrivo anche il metodo beforeSpringSecurityFilterChain che riguarda javadoc:

 Invoked before the springSecurityFilterChain is added. 

Quindi ho pensato che questo fosse il posto migliore per registrare CharacterEncodingFilter:

 public class MessageSecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { @Override protected void beforeSpringSecurityFilterChain(ServletContext servletContext) { FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter()); characterEncodingFilter.setInitParameter("encoding", "UTF-8"); characterEncodingFilter.setInitParameter("forceEncoding", "true"); characterEncodingFilter.addMappingForUrlPatterns(null, true, "/*"); } } 

Ma questo non funziona.

Un’altra opzione che stanco era di registrare il filtro attraverso la class AbstractAnnotationConfigDispatcherServletInitializer sostituendo il metodo getServletFilters ():

 public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //{!begin addToRootContext} @Override protected Class[] getRootConfigClasses() { return new Class[] { SecurityConfig.class, DatabaseConfig.class, InternationalizationConfig.class }; } //{!end addToRootContext} @Override protected Class[] getServletConfigClasses() { return new Class[] { WebAppConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Filter[] getServletFilters() { CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter(); characterEncodingFilter.setEncoding("UTF-8"); characterEncodingFilter.setForceEncoding(true); return new Filter[] { characterEncodingFilter}; } } 

Ma questo non funziona neanche. Qualcuno incontra lo stesso problema o ha qualche idea su come risolvere questo problema?

Ecco la mia configurazione completa per la prima opzione in cui sto registrando il filtro di codifica tramite AbstractSecurityWebApplicationInitializer:

 @Order(1) public class MessageSecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer { @Override protected void beforeSpringSecurityFilterChain(ServletContext servletContext) { FilterRegistration.Dynamic characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter()); characterEncodingFilter.setInitParameter("encoding", "UTF-8"); characterEncodingFilter.setInitParameter("forceEncoding", "true"); characterEncodingFilter.addMappingForUrlPatterns(null, true, "/*"); } } @Order(2) public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //{!begin addToRootContext} @Override protected Class[] getRootConfigClasses() { return new Class[] { SecurityConfig.class, DatabaseConfig.class, InternationalizationConfig.class }; } //{!end addToRootContext} @Override protected Class[] getServletConfigClasses() { return new Class[] { WebAppConfig.class }; } @Override protected String[] getServletMappings() { return new String[] { "/" }; } } @EnableWebMvc //@Import(value = {DatabaseConfig.class, InternationalizationConfig.class, SecurityConfig.class}) @ComponentScan(basePackages = {"com.ajurasz.controller", "com.ajurasz.service", "com.ajurasz.model"}) @Configuration public class WebAppConfig extends WebMvcConfigurerAdapter { @Bean public UrlBasedViewResolver viewResolver() { UrlBasedViewResolver urlBasedViewResolver = new UrlBasedViewResolver(); urlBasedViewResolver.setViewClass(TilesView.class); urlBasedViewResolver.setContentType("text/html;charset=UTF-8"); return urlBasedViewResolver; } @Bean public TilesConfigurer tilesConfigurer() { TilesConfigurer tilesConfigurer = new TilesConfigurer(); tilesConfigurer.setDefinitions(new String[] {"/WEB-INF/tiles.xml"}); return tilesConfigurer; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/**"); registry.addResourceHandler("/documents/**").addResourceLocations("/WEB-INF/pdfs/documents/**"); } @Override public void addArgumentResolvers(List argumentResolvers) { PageableHandlerMethodArgumentResolver pageableHandlerMethodArgumentResolver = new PageableHandlerMethodArgumentResolver(); pageableHandlerMethodArgumentResolver.setFallbackPageable(new PageRequest(0, 4, new Sort(Sort.Direction.DESC, "id"))); argumentResolvers.add(pageableHandlerMethodArgumentResolver); } } 

dipendenze:

spring-mvc 3.2.5.RELEASE

spring-security-config, spring-security-web, spring-security-core 3.2.0.RELEASE

Sto lavorando su questo sotto il seguente link: https://github.com/ajurasz/Manager