如何在Spring Security 5.8中链接oauth2ResourceServer和oauth2Login

ifmq2ha2  于 11个月前  发布在  Spring
关注(0)|答案(1)|浏览(130)

我有一个spring web应用程序,需要对可能有也可能没有Oauth2 token的请求进行身份验证。如果请求没有Bearer token,则应重定向到oauth2登录页面。如果它有Bearer token,则应使用oauth2 jwt解码器。是否可以像这样链接安全过滤器?我尝试了以下方法,但链接失败,错误代码为Cannot resolve method 'and' in 'HttpSecurity'

http.authorizeHttpRequests(authorizeRequests ->
                                       authorizeRequests.requestMatchers("/")
                                                        .authenticated()
                                                        .requestMatchers("/admin/**")
                                                        .authenticated()
                                                        .requestMatchers("/v1/**")
                                                        .permitAll()
            )
            .csrf().ignoringRequestMatchers("/admin/**")
            .and()
            .oauth2ResourceServer(oauth2 -> oauth2
                .jwt().decoder(jwtDecoder()))
            .and()
            .oauth2Login().userInfoEndpoint();

字符串

qhhrdooz

qhhrdooz1#

如果您使用and()配置选项,则没有and()。它不是必需的,因此不受支持,请参阅Lambda DSL的目标:

Lambda DSL的目标

创建Lambda DSL是为了实现以下目标:

  • 自动缩进使配置更具可读性。
  • 无需使用.and()链接配置选项
  • Spring Security DSL与其他Spring DSL(如Spring Integration和Spring Cloud Gateway)具有类似的配置风格。

从Spring Security 5.2开始,您可以使用或不使用Paddas配置安全选项。使用Spring Security 7,您将不得不仅使用Paddas,请参阅Use the Lambda DSL

使用Lambda DSL

Lambda DSL从5.2版开始就出现在Spring Security中,它允许使用Apache来配置HTTP安全性。
您可能在Spring Security文档或示例中看到过这种配置风格。让我们来看看HTTP security的lambda配置与以前的配置风格的比较。

  • 使用配置文件 *
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(authorize -> authorize
                .requestMatchers("/blog/**").permitAll()
                .anyRequest().authenticated()
            )
            .formLogin(formLogin -> formLogin
                .loginPage("/login")
                .permitAll()
            )
            .rememberMe(Customizer.withDefaults());

        return http.build();
    }
}

字符串

  • 等效配置,不使用HDAS *
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests()
                .requestMatchers("/blog/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .rememberMe();

        return http.build();
    }
}


Lambda DSL是配置Spring Security的首选方式,之前的配置样式在Spring Security 7中将无效,因为在Spring Security 7中需要使用Lambda DSL。这样做主要有以下几个原因:

  • 如果不知道返回类型,就不清楚配置了什么对象。嵌套越深,就越令人困惑。即使是有经验的用户也会认为他们的配置在做一件事,而实际上,它在做另一件事。
  • 一致性。许多代码库在两种风格之间切换,这导致了不一致,使理解配置变得困难,并经常导致错误配置。

相关问题