从Spring Security

时间:2018-05-03 09:33:08

标签: java spring spring-boot spring-security url-pattern

将某些API升级到版本2后,我必须在身份验证失败时配置自定义过滤器,以便为用户提供新格式化的错误响应。我遇到了一个问题,因为版本2网址也遵循已配置现有过滤器的相同网址模式。

以前,我添加了以下配置来验证受保护的网址格式。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .csrf().disable() 
        .exceptionHandling()
            .authenticationEntryPoint(this.authenticationEntryPoint)    
            .and()      
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
        .authorizeRequests()
            .antMatchers("/*/login").permitAll() 
            .antMatchers(HttpMethod.OPTIONS).permitAll()
            .antMatchers("/auth/refresh-token").permitAll() 
            .antMatchers("/auth/external/login").permitAll()
            .and()
        .authorizeRequests()
            .antMatchers("/api/**").authenticated()// Protected API End-points
            .and()
        .addFilterBefore(buildLoginProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
        .addFilterBefore(buildProgrmmaticAuthProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
        .addFilterBefore(buildJwtTokenAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class);
}

如您所见,以/api/**开头的网址配置为使用添加的过滤器进行身份验证和过滤。

现在问题是,版本2网址也以/api开头。但我需要配置一个不同的过滤器,如下所示。

http
    .exceptionHandling().authenticationEntryPoint(this.authenticationEntryPoint)

    .and().authorizeRequests()
    .antMatchers("/api/something/v2/**").authenticated().and().
    addFilterBefore(buildJwtAuthProcessingFilterForVersionTwo(), UsernamePasswordAuthenticationFilter.class);

由于第一次配置已捕获以api/开头的网址,因此新配置无法计数。

我是否有任何方法可以将网址格式添加到FIRST配置中,其中网址以/api开头,但不包括/api/**/v2/**等网址?

0 个答案:

没有答案