将某些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/**
等网址?