KeyCloak整合Spring Boot仅GET请求正常,非GET请求返回403问题咨询
问题原因
这个问题的核心是HttpSecurity配置的执行顺序错误,导致CSRF防护被意外开启:
- 你在自定义
configure(HttpSecurity http)方法中先执行了http.csrf().disable()关闭CSRF防护,随后调用了super.configure(http) - Keycloak提供的父类配置方法会重新启用CSRF防护,直接覆盖了你之前的关闭配置
- CSRF防护默认仅拦截POST、PUT、DELETE等修改类型的请求,GET请求不受校验规则影响,因此GET请求能正常返回,其他请求会因为没有携带合法CSRF Token直接返回403。且该拦截发生在认证逻辑之后,所以你能看到正常的认证通过日志。
解决方案
调整配置方法的执行顺序,将父类配置调用放在自定义配置的最前面即可,修改后的配置如下:
protected void configure(HttpSecurity http) throws Exception { // 先执行父类配置,再写自定义规则覆盖需要修改的部分 super.configure(http); http.csrf().disable().authorizeRequests() .anyRequest().hasRole("admin"); }
内容的提问来源于stack exchange,提问作者user3353393
相关产品推荐
相关产品推荐

