Spring Security 5.8中如何串联oauth2ResourceServer与oauth2Login?
问题解决:Spring Security 配置无令牌重定向登录、有令牌JWT验证
你遇到的Cannot resolve method 'and' in 'HttpSecurity'报错,是因为Spring Security 5.4版本开始推荐使用Lambda式配置风格,这种写法下不再需要用.and()连接不同配置块,直接链式调用HttpSecurity的方法即可。
正确配置代码
http.authorizeHttpRequests(authorizeRequests -> authorizeRequests .requestMatchers("/v1/**").permitAll() // 放行无需认证的路径,建议前置避免规则覆盖 .requestMatchers("/", "/admin/**").authenticated() // 需要认证的路径 ) .csrf(csrf -> csrf.ignoringRequestMatchers("/admin/**")) // 忽略指定路径的CSRF校验 .oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> jwt.decoder(jwtDecoder())) // 配置JWT解码器处理Bearer令牌 ) .oauth2Login(oauth2 -> oauth2.userInfoEndpoint() // 配置OAuth2登录的用户信息端点 );
配置说明
- 路径权限规则:将
permitAll的路径放在前面,避免被后续authenticated规则覆盖,确保/v1/**始终放行。 - CSRF配置:通过Lambda直接配置忽略
/admin/**的CSRF校验,无需.and()衔接。 - OAuth2资源服务器:配置JWT解码器后,当请求携带
Bearer令牌时,Spring Security会自动用该解码器验证令牌有效性。 - OAuth2登录:当请求未携带有效令牌时,Spring Security会自动触发OAuth2登录流程,重定向到授权服务器的登录页面,完成登录后再返回原请求路径。
该配置完全满足你的需求:无令牌时重定向登录,有令牌时用JWT解码器验证。
内容的提问来源于stack exchange,提问作者seriousgeek
相关产品推荐
相关产品推荐

