Spring Cloud Gateway с Spring Security - PullRequest
       72

Spring Cloud Gateway с Spring Security

1 голос
/ 20 марта 2019

Я использую Spring Cloud Gateway вместе с Spring Security для защиты конечных точек моего привода и пользовательского шлюза для фильтрации авторизации.Ниже приведены реализации, которые я сделал:

Для безопасности Spring я использовал следующую конфигурацию:

@EnableWebFluxSecurity
public class WebSecurityConfig {

    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
       http.csrf().disable().authorizeExchange().pathMatchers("/actuator/**").authenticated().anyExchange().permitAll().and().httpBasic();
       return http.build();
    }
}

И мой пользовательский фильтр выглядит так:

@Component
public class AuthorizationRequestFilter implements GatewayFilterFactory<AuthorizationRequestFilter.Config>, Ordered {


@Override
public GatewayFilter apply(Config config) {
    return (exchange, chain) -> {
        ServerHttpRequest request = exchange.getRequest();
        String authToken = request.getHeaders().getFirst("Authorization");
        if (StringUtils.isEmpty(authToken)) {
            exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
            byte[] response =  "{\"status\":\"401\",\"message\":\"Unauthorized.\"}".getBytes(StandardCharsets.UTF_8);
            DataBuffer buffer = exchange.getResponse().bufferFactory().wrap(response);
            return exchange.getResponse().writeWith(Flux.just(buffer));
        }
        return chain.filter(exchange.mutate().request(request).build());
    };
}

   @Override
   public Config newConfig() {
       return new Config("AuthorizationRequestFilter");
   }

   public static class Config {

    public Config(String name) {
        this.name = name;
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
   }

   @Override
   public int getOrder() {
       return 1;
   }
}

Есть ли способ, которым я могу достичь этого в одном месте, где я могу настроить оба?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...