具有spring-security和webflux公共模式的过滤器链



我可能遗漏了一些明显的东西,但我自己无法解决。所以我希望你能帮助我。

我正在尝试保护一个spring-webflux应用程序,事实上只是该应用程序的一个子集,我希望一些端点不受保护。这是我的安全配置:

@EnableReactiveMethodSecurity
@EnableWebFluxSecurity
public class WebSecurityConfig  {
...
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http
.authorizeExchange()
.pathMatchers("/process_login", "/login", "/logout").permitAll()
.pathMatchers("/api/team").permitAll()
.anyExchange().authenticated()
.and()
.addFilterAt(webFilter(), SecurityWebFiltersOrder.AUTHORIZATION)
.addFilterAt(new AuthorizationModifierFilter(),SecurityWebFiltersOrder.AUTHENTICATION)
;
http.httpBasic().disable()
.formLogin().disable()
.logout().disable();
return http.build();
}
...
}

当访问/api/team端点时,我本以为不会通过安全过滤器链,但我正在进入我的安全过滤器。

知道我做错了什么吗?

谢谢你的帮助Marc

不要破坏链。应该是这样的。试试这个,如果它不起作用,我会相应地更新

private static String[] permittedUrl = new String[]{
"/process_login", "/login", "/logout", "/api/team"
};
........
........
return http
.csrf().disable()
.cors().disable()
.formLogin().disable()
.httpBasic().disable()
.exceptionHandling()
.authenticationEntryPoint((swe, e) ->
Mono.fromRunnable(() -> {
swe.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
})
)
.accessDeniedHandler((swe, e) ->
Mono.fromRunnable(() -> {
swe.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
})
)
.and()
.authorizeExchange()
.pathMatchers(permittedUrl).permitAll()
.anyExchange()
.authenticated()
.and()
.build();

相关内容

  • 没有找到相关文章