Hello! Understanding that there were many who discussed those or other problems with encoding mass, but I didn’t find a solution, so I appeal to you, my friends!

The problem is that when you try to make a change to the database (jsp-hibernate-MySql), cracks appear, instead of Cyrillic. Created a base like this

`create database universityapp DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;` 

Filter in application deployment configuration present

 FilterRegistration.Dynamic filterEncoding = container.addFilter("characterEncodingFilter", CharacterEncodingFilter.class); filterEncoding.setInitParameter("encoding", "UTF-8"); filterEncoding.setInitParameter("forceEncoding", "true"); filterEncoding.addMappingForServletNames(null, true, "dispatcher"); 

Also from the property, the url of the database is registered as

 jdbc.url = jdbc:mysql://localhost:3306/app?useUnicode=yes&characterEncoding=UTF-8 

Also in server.xml in tomcat prescribed encoding

  <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" /> 

But nothing helps, the key here is that the encoding began to fly as soon as I added authorization to the application using Spring Security, before that everything worked correctly and the records in the database were Cyrillic.

Spring Security Configuration Class

  @Configuration @EnableWebSecurity public class SecurityConfiguration extends WebSecurityConfigurerAdapter{ @Autowired @Qualifier("customUserDetailsService") UserDetailsService userDetailsService; @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(11); } @Bean public DaoAuthenticationProvider authenticationProvider() { DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider(); authenticationProvider.setUserDetailsService(userDetailsService); authenticationProvider.setPasswordEncoder(passwordEncoder()); return authenticationProvider; } @Autowired public void configureGlobalSecurity(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService); auth.authenticationProvider(authenticationProvider()); } @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/", "/students", "/subjects").permitAll() .antMatchers("/student/**").hasAnyRole("USER", "ADMIN") .and().formLogin().loginPage("/login") .usernameParameter("username").passwordParameter("password") .and().csrf() .and().exceptionHandling().accessDeniedPage("/AccessDenied"); } } 

Spring Security Initialization Class

  import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer; public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer{ } 

Spring MVC Configuration

  @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.kubar.universityapp") public class AppConfig extends WebMvcConfigurerAdapter{ @Bean public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setViewClass(JstlView.class); viewResolver.setPrefix("/WEB-INF/views/"); viewResolver.setSuffix(".jsp"); return viewResolver; } @Bean public MessageSource messageSource() { // Бин, определяющий файл с сообщениями ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setDefaultEncoding("utf-8"); messageSource.setBasename("messages"); return messageSource; } @Override public void addResourceHandlers(final ResourceHandlerRegistry registry) { registry.addResourceHandler("/resources/**").addResourceLocations("/resources/"); } } 

Application Deployment Class

 public class AppInitializer implements WebApplicationInitializer { public void onStartup(ServletContext container) throws ServletException { AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); ctx.register(AppConfig.class, SecurityConfiguration.class); container.addListener(new ContextLoaderListener(ctx)); ctx.setServletContext(container); ServletRegistration.Dynamic servlet = container.addServlet( "dispatcher", new DispatcherServlet(ctx)); servlet.setLoadOnStartup(1); servlet.addMapping("/"); FilterRegistration.Dynamic filterOpenSession = container.addFilter("openEntityManagerInViewFilter", OpenSessionInViewFilter.class); filterOpenSession.setInitParameter("singleSession", "true"); filterOpenSession.addMappingForServletNames(null, true, "dispatcher"); FilterRegistration.Dynamic filterEncoding = container.addFilter("characterEncodingFilter", CharacterEncodingFilter.class); filterEncoding.setInitParameter("encoding", "UTF-8"); filterEncoding.setInitParameter("forceEncoding", "true"); filterEncoding.addMappingForServletNames(null, true, "dispatcher"); } 

}

And hibernate settings

  @Configuration @EnableTransactionManagement @ComponentScan({ "com.kubar.universityapp.configuration" }) @PropertySource(value = {"classpath:application.properties"}) // Месторасположение properties файла public class HibernateConfiguration { @Autowired private Environment environment; @Bean public LocalSessionFactoryBean sessionFactory() { LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); sessionFactory.setPackagesToScan("com.kubar.universityapp.model"); sessionFactory.setHibernateProperties(hibernateProperties()); return sessionFactory; } @Bean public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName")); dataSource.setUrl(environment.getRequiredProperty("jdbc.url")); dataSource.setUsername(environment.getRequiredProperty("jdbc.username")); dataSource.setPassword(environment.getRequiredProperty("jdbc.password")); return dataSource; } private Properties hibernateProperties() { Properties properties = new Properties(); properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect")); properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql")); properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql")); return properties; } @Bean @Autowired public HibernateTransactionManager transactionManager(SessionFactory s) { HibernateTransactionManager txManager = new HibernateTransactionManager(); txManager.setSessionFactory(s); return txManager; } } 
  • Hello! I was helped by the decision from this post . I do not use web.xml. - Alexander Stegnin

1 answer 1

The key here is really Spring Security. Your filterEncoding should be the first, and in the case of using Security it gets up after FilterChain. 3 days toiled, I was helped by the answer from this post .

  • Alexander, thank you for the answer! He helped me - CopKubar
  • I am glad to help! He himself was blown away for 3 days ... - Alexander Stegnin