Grails、Spring Security 和 Keycloak:表单以 ISO-8859-1 而不是 UTF-8 提交
Posted
技术标签:
【中文标题】Grails、Spring Security 和 Keycloak:表单以 ISO-8859-1 而不是 UTF-8 提交【英文标题】:Grails, Spring Security & Keycloak: Forms are submitted as ISO-8859-1 instead of UTF-8 【发布时间】:2021-09-30 08:51:26 【问题描述】:我在 Grails 4.0.9 中使用 Keycloak 和 Spring Security。具有以下依赖项
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 页面上打印出来时,将导致 'ö'。帖子参数看起来正确。我还检查了 application.yml (view/gsp/encoding = utf-8) 中的 Grails 设置。
我的 securityConfig 如下所示:
@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 - 但问题似乎已解决。
【问题讨论】:
你能否让你的样本尽可能少,以确认它是 Spring Security?另外,您是否能够使用受支持的 Spring Security 版本(在本文发布时为 5.2+)并查看它是否仍在发生? 我完全删除了 Keycloak 库并原生实现了 Spring Security "5.3.10.RELEASE"。我提交的每个带有“ö”的表格都会产生“ö”。 即使我建立一个war文件并在本地运行它,问题仍然存在。 【参考方案1】:我从https://***.com/a/23051264/2027053 找到了解决方案,它有效。因此,我在 configure 方法中添加了 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)
【讨论】:
以上是关于Grails、Spring Security 和 Keycloak:表单以 ISO-8859-1 而不是 UTF-8 提交的主要内容,如果未能解决你的问题,请参考以下文章
Grails + spring-security-core:用户登录后如何分配角色?
Grails 3 和 Spring Security:当用户未登录时返回 401
Grails - Spring Security / Social - Facebook 插件 setAccessToken 和 getAccessToken
ClassNotFoundException: SimpleGrantedAuthority - Grails 2.4.2 和 Spring Security