You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Grails集成Spring Security、Keycloak时表单提交编码变为ISO-8859-1问题

解决方案

你遇到的是Spring Security过滤链优先级高于系统字符编码过滤器导致的编码解析异常,可按以下步骤修复:

  1. 优先调整字符编码过滤器优先级(推荐)
    在Grails项目的配置类中注册字符编码过滤器,设置其优先级高于Spring Security过滤链:
import org.springframework.boot.web.servlet.FilterRegistrationBean
import org.springframework.core.Ordered
import org.springframework.web.filter.CharacterEncodingFilter

@Bean
FilterRegistrationBean<CharacterEncodingFilter> characterEncodingFilter() {
    def registration = new FilterRegistrationBean<>(new CharacterEncodingFilter())
    registration.filter.with {
        encoding = "UTF-8"
        forceEncoding = true
    }
    // 设置为最高优先级,确保在所有过滤器前执行编码设置
    registration.order = Ordered.HIGHEST_PRECEDENCE
    return registration
}
  1. 在Spring Security过滤链头部追加编码过滤器
    如果上述方案不生效,可以直接在Security配置类的configure方法中,将字符编码过滤器加到Spring Security过滤链的最前端:
@Override
protected void configure(HttpSecurity http) throws Exception {
    // 先追加编码过滤器
    def encodingFilter = new CharacterEncodingFilter()
    encodingFilter.encoding = "UTF-8"
    encodingFilter.forceEncoding = true
    http.addFilterBefore(encodingFilter, CsrfFilter.class)
    
    super.configure(http)
    http
        .authorizeRequests()
        .anyRequest().permitAll()
    http.csrf().disable()
}

额外检查项

  • 确认所有GSP页面的<head>标签中已明确声明<meta charset="UTF-8">
  • 检查项目中是否存在其他自定义过滤器修改了请求编码配置

内容的提问来源于stack exchange,提问作者sullivan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:27:02