Spring Hibernate无法使用波兰字符保存数据(UTF-8问题)

时间:2018-03-27 22:48:26

标签: java spring hibernate utf-8 spring-security

我知道这是一个受欢迎的问题,但我研究整个stackoverflow,我找不到解决我的问题或现有的解决方案不起作用。

我的应用程序使用Spring和Hibernate。在坚持使用数据库后,波兰语字母将更改为问号。

我的代码: SecurityConfig.class

@EnableWebSecurity
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
private UserService userService;

@Override
public void configure(WebSecurity web) throws Exception {
    web.debug(false);
}

@Override
protected void configure(HttpSecurity http) throws Exception {

    CharacterEncodingFilter filter = new CharacterEncodingFilter();
    filter.setEncoding("UTF-8");
    filter.setForceEncoding(true);
    http.addFilterBefore(filter,CsrfFilter.class);
    System.out.println("Jestem w WebSecurityConfigurerAdapter");

 ...
}

AppConfig.java

@EnableWebMvc
@Configuration
@ComponentScan({ "com.everydayhabits.*" })
@EnableTransactionManagement
@PropertySource("classpath:persistence-mysql.properties")
@Import({SecurityConfig.class})
public class AppConfig implements WebMvcConfigurer {

...

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/view/");
        viewResolver.setSuffix(".jsp");
        viewResolver.setContentType("text/html;charset=UTF-8");
        return viewResolver;
    }

SpringMvcInitializer.class

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[] { AppConfig.class, SecurityConfig.class};
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return null;
    }

    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }
}

SpringSecurityInitializer.class

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer {

    @Override
    protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
        super.beforeSpringSecurityFilterChain(servletContext);

        FilterRegistration.Dynamic characterEncodingFilter;
        characterEncodingFilter = servletContext.addFilter("encodingFilter", new CharacterEncodingFilter());
        characterEncodingFilter.setInitParameter("encoding", "UTF-8");
        characterEncodingFilter.setInitParameter("forceEncoding", "true");
        characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
    }

}

pom.xml

...
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>2.3.2</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <encoding>${project.build.sourceEncoding}</encoding>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.4</version>
                    <configuration>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                        <resourceEncoding>${project.build.sourceEncoding}</resourceEncoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
...

Apache server.xml

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

myjsppage.jsp

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

我是否错过了为我的应用程序启用UTF-8的任何内容?有没有人有类似的问题?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您可以尝试更改SpringSecurityInitializer,如下所示: -

@Override
protected void beforeSpringSecurityFilterChain(ServletContext servletContext) {
    super.beforeSpringSecurityFilterChain(servletContext);

    FilterRegistration.Dynamic characterEncodingFilter;
    CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
    encodingFilter.setEncoding("UTF-8");
    encodingFilter.setForceEncoding(true);
    characterEncodingFilter = servletContext.addFilter("encodingFilter", encodingFilter);
    characterEncodingFilter.addMappingForUrlPatterns(null, false, "/*");
}