在资源服务器的配置中,添加了请求白名单,如下
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Autowired
private OAuth2Properties properties;
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/test/**").permitAll()
.anyRequest().authenticated()
.and()
.csrf().disable();
}
@Bean
public RemoteTokenServices tokenServices() {
RemoteTokenServices services = new RemoteTokenServices();
services.setCheckTokenEndpointUrl(properties.getTokenInfoUri());
services.setClientId(properties.getClientId());
services.setClientSecret(properties.getClientSecret());
return services;
}
}
测试controller
@RestController
@RequestMapping("/test")
public class TestController {
@PostMapping("/test1")
public String test1() {
System.out.println(123);
return "123";
}
@PostMapping("/test2")
public String test2() {
System.out.println(333);
return "222333";
}
}
当使用postman正常请求http://localhost:8109/test/test2时,能获取到返回结果
但当请求添加上请求头时(这里是前端做了统一的处理,到后端的请求会统一携带Authorization等token信息),但是对于我的资源服务接口来说,我不想管前端的请求是否携带请求头token,都想根据白名单不进行oauth2的鉴权操作,但是实际是这样还是会触发鉴权
可以通过重写WebSecurityConfigurerAdapter的 configure()方法,使白名单请求不受Spring Security的保护。这样即使请求中包含Authorization
头,也不会触发鉴权(在资源服务器中添加)。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/test/test2");
}
}