>我需要验证从"/api/auth"开始的所有请求,除了"/api/auth/login"和"/api/auth/token/refresh"。这是我的安全配置配置方法。问题是,它没有按预期工作。它检查"/api/auth/token/refresh"的身份验证,即使我为它分配了 permitAll。
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api/auth/login").antMatcher("/api/auth/token/refresh")
.antMatcher("/api/auth/**")
.antMatcher("/api/**");
http
.cors()
.and()
.csrf()
.disable()
.exceptionHandling()
.authenticationEntryPoint(unauthorizedHandler)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(AUTH_WHITELIST)
.permitAll()
.antMatchers("/api/auth/login","/api/auth/token/refresh").permitAll()
.antMatchers("/api/auth/**").authenticated()
.antMatchers("/api/**").permitAll()
.anyRequest()
.permitAll();
// Add our custom JWT security filter
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}
删除前 3 行代码。
antMatcher(String)
的Javadoc 说:
调用
antMatcher(String)
将覆盖以前对 [...]、antMatcher(String)
、[...] 的调用。
叫它 4 次并不能做到你认为的那样。