通过多种配置保护同一个端点

时间:2018-08-30 09:12:32

标签: spring spring-security

我们拥有一个微服务架构,该架构的安全性与JWT背对背,而HTTP Basic的背对背安全性。

这是我们的JWT配置类:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .requestMatchers()
            .antMatchers(endpointsProperties.getJwtWithWildcard())
            .and()
            .csrf().disable()
            .authorizeRequests().anyRequest().authenticated()
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().addFilterBefore(jwtFilter(), UsernamePasswordAuthenticationFilter.class);
}

jwtFilter是一个简单的过滤器,它读取Authorization标头并设置SecurityContextHolder。

还有HTTP Basic:

@Override
public void configure(final AuthenticationManagerBuilder auth) throws Exception {
    for (Map<String, String> userData : properties.getUsers()) {
        auth.inMemoryAuthentication().passwordEncoder(NoOpPasswordEncoder.getInstance())
                .withUser(userData.get("login")).password(userData.get("password")).authorities(BASIC_AUTH_AUTHORITY);
    }


@Override
protected void configure(HttpSecurity http) throws Exception {
    http.requestMatchers().antMatchers(endpoints.getBasicWithWildcard() )
            .and().csrf().disable()
            .authorizeRequests().anyRequest().authenticated()
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and().httpBasic();
}

这些配置类用于具有不同JWT和HTTP Auth端点的differnets服务中。它们可以同时使用,也可以独立使用。 EndpointsProperties是从application.yml加载的。

但是,现在,我们希望一些参考微服务可以通过其他服务或(Web)前端应用程序实现访问。我们想知道是否可以通过两种不同的方法来保护相同的URL(例如'/ api / referential')。将这些配置类与相同的端点组合在一起是行不通的,而且似乎其中一种配置会抹除另一种。

是否可以使用类似的方法来保护相同的URL路径?如果是,我们需要更改什么来启用它?

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

我认为您可以按此顺序将两个过滤器添加到过滤器链中

  1. BasicAuthenticationFilter
  2. JwtFilter

并确保将@media (max-width: 767px){ .class_name img{ display: none; } } 的{​​{1}}属性设置为ignoreFailure

这将使basicAuthFilter使用basicAuth对请求进行身份验证,如果未发送basicAuth,则继续沿过滤器链向下移动-从而委托给JwtFilter。

然后从BasicAuthenticationFilter中删除true-因为它将尝试添加另一个BasicSecurityFilter。

只是个袖手旁观