Grails,Spring 安全和 Keycloak:表单以 ISO-8859-1 而不是 UTF-8 提交
Grails, Spring Security & Keycloak: Forms are submitted as ISO-8859-1 instead of UTF-8
我正在使用 Keycloak 和 Spring Security with Grails 4.0.9。具有以下依赖项
compile group: 'org.keycloak', name: 'keycloak-spring-security-adapter', version: '12.0.2'
compile "org.springframework.security:spring-security-config:4.2.13.RELEASE"
compile "org.springframework.security:spring-security-web:4.2.13.RELEASE"
我提交的任何带有特殊字符的表格,即。 ä, 当我在 html 页面上打印出来时,结果将是 'ö'。 post 参数看起来正确。我还检查了 application.yml 中的 Grails 设置(view/gsp/encoding = utf-8)。
我的安全配置如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http)
http
.authorizeRequests()
.anyRequest().permitAll()
http.csrf().disable() // disable CSRF since g:forms wouldnt work
}
如果我删除依赖项,表单提交将按预期工作。因此,我认为 spring-security.
存在问题
PS:我检查了 https://github.com/spring-projects/spring-boot/issues/3912 - 但问题似乎已解决。
我从 找到了解决方案并且它有效。因此,我在配置方法中添加了 CharacterEncodingFilter:
import org.springframework.web.filter.CharacterEncodingFilter
import org.springframework.security.web.csrf.CsrfFilter
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http)
CharacterEncodingFilter filter = new CharacterEncodingFilter()
filter.setEncoding("UTF-8")
filter.setForceEncoding(true)
http.addFilterBefore(filter,CsrfFilter.class)
}
我正在使用 Keycloak 和 Spring Security with Grails 4.0.9。具有以下依赖项
compile group: 'org.keycloak', name: 'keycloak-spring-security-adapter', version: '12.0.2'
compile "org.springframework.security:spring-security-config:4.2.13.RELEASE"
compile "org.springframework.security:spring-security-web:4.2.13.RELEASE"
我提交的任何带有特殊字符的表格,即。 ä, 当我在 html 页面上打印出来时,结果将是 'ö'。 post 参数看起来正确。我还检查了 application.yml 中的 Grails 设置(view/gsp/encoding = utf-8)。
我的安全配置如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http)
http
.authorizeRequests()
.anyRequest().permitAll()
http.csrf().disable() // disable CSRF since g:forms wouldnt work
}
如果我删除依赖项,表单提交将按预期工作。因此,我认为 spring-security.
存在问题PS:我检查了 https://github.com/spring-projects/spring-boot/issues/3912 - 但问题似乎已解决。
我从 找到了解决方案并且它有效。因此,我在配置方法中添加了 CharacterEncodingFilter:
import org.springframework.web.filter.CharacterEncodingFilter
import org.springframework.security.web.csrf.CsrfFilter
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http)
CharacterEncodingFilter filter = new CharacterEncodingFilter()
filter.setEncoding("UTF-8")
filter.setForceEncoding(true)
http.addFilterBefore(filter,CsrfFilter.class)
}