Цепочка фильтров с пружинной защитой и шаблонами webflux publi c - PullRequest
0 голосов
/ 21 апреля 2020

Я мог бы упустить что-то очевидное, но сам не могу понять это. Поэтому я надеюсь, что вы сможете мне помочь.

Я пытаюсь защитить весеннее приложение 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 я ожидал, что не пропущу цепочку фильтров безопасности, но я передаю свои фильтры безопасности.

Любой Понятие, что я делаю неправильно?

Спасибо за вашу помощь. Мар c

1 Ответ

0 голосов
/ 21 апреля 2020

не разорвать цепь. Это должно быть что-то вроде этого. попробуйте это, если это не сработает, я обновлю соответственно

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();
...