使用SecurityFilterChain在Spring云网关中登录用户

cnjp1d6j  于 2022-12-13  发布在  Spring
关注(0)|答案(1)|浏览(180)

**我做什么?**大家好,我正在尝试创建一个网关(使用Spring云网关和Sping Boot 3.0.0),用于管理路由的身份验证和授权。
**我的问题是什么?**我的问题是我使用的是springSecurityFilterChain,在此过滤器之前无法运行任何内容,因此如果用户要访问专用路由,我无法对他进行身份验证。
**我想要什么?**我想知道如何在用户通过filterChain之前对其进行身份验证(我已经尝试过在论坛、帖子等中看到的许多方法,但我一直无法做到:/)。
我的代码

@Configuration
@EnableWebFluxSecurity
public class WebfluxSecurityConfig{

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http.csrf().disable()
        .authorizeExchange()
        .pathMatchers(Routes.PUBLIC_ROUTES).permitAll()    //Public routes
        .pathMatchers(Routes.AUTH_ROUTES).authenticated(); //Authenticate routes
 
        return http.build();
    }
    
}

我正在尝试在Spring Cloud Gateway中的springSecurityFilterChain之前验证用户,但目前我还无法这样做,因为我无法在过滤器链之前放置任何过滤器进行验证。

l0oc07j2

l0oc07j21#

您需要创建用户来完成此操作。请参见下面所附的示例。我正在使用内存中的用户进行身份验证。注意,内存中的用户仅用于测试目的。
https://github.com/DeepuGeorgeJacob/school-management/blob/main/security/in-memory-user-security/src/main/java/com/school/management/config/InMemoryUserSecurityAdapter.java

@Configuration
public class InMemoryUserSecurityAdapter {

@Bean
public SecurityWebFilterChain filterChain(ServerHttpSecurity http) {
    return http
            .authorizeExchange()
            .pathMatchers("/school-library-service/**").authenticated()
            .and().authenticationManager(reactiveAuthenticationManager())
            .authorizeExchange().anyExchange().permitAll().and()
            .httpBasic().and()
            .build();
}

@Bean
ReactiveAuthenticationManager reactiveAuthenticationManager(){
    return new UserDetailsRepositoryReactiveAuthenticationManager(getInMemoryUserDetails());
}

@Bean
public MapReactiveUserDetailsService getInMemoryUserDetails() {
    UserDetails admin = User.withDefaultPasswordEncoder().username("admin1").password("password")
            .roles("ADMIN")
            .build();
    return new MapReactiveUserDetailsService(admin);
}

}
要记录事件,请在属性文件中尝试以下logging.level.org.springframework.security=TRACE
快乐编码:)

相关问题