Spring Boot 1.5中SecurityConfig导致OAuth2失效问题排查
问题分析与解决方案
当你自定义WebSecurityConfigurerAdapter并添加@EnableOAuth2Sso和@Configuration注解后,Spring Security的默认OAuth2 SSO自动配置会被你的自定义配置覆盖。此时如果没有明确配置授权规则和登录触发逻辑,就会出现直接返回"Access Denied"的情况——因为默认的自定义安全配置会拒绝所有未认证请求,但没有触发重定向到Keycloak的登录流程。
解决步骤
必须在自定义的WebSecurityConfigurerAdapter中,显式配置HTTP授权规则,让未认证请求触发OAuth2登录跳转。重写configure(HttpSecurity http)方法,示例代码如下:
@Configuration @EnableOAuth2Sso public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // 指定所有请求都需要认证 .anyRequest().authenticated() .and() // 按需禁用CSRF(若应用不需要该防护可配置,根据实际场景调整) .csrf().disable(); } }
关键注意点
- 不要在配置中添加
http.formLogin(),这会替换掉OAuth2的登录流程,导致不会重定向到Keycloak。 - 确保
authorizeRequests()中至少有一条规则触发认证(比如anyRequest().authenticated()),这样未认证的请求才会被引导到OAuth2登录页面。 - 检查是否存在多个
WebSecurityConfigurerAdapter实例,若有需通过@Order注解指定优先级,避免配置冲突。
内容的提问来源于stack exchange,提问作者Karthik Sankaran
相关产品推荐
相关产品推荐

