我不知道我在做什麼錯,但是當我嘗試使用ResourceServerConfigurerAdapter
來保護某些REST資源時,它不起作用。我只能使用@PreAuthorize
或在WebSecurityConfigurerAdapter
上設置安全性來實現我的目標。Spring資源上的安全性僅適用於'@PreAuthorize'
實際上,WebSecurityConfigurerAdapter
正在竊取HttpSecurity
設置的所有可能性。我相信這與篩選順序有關。我搜索了關於文檔的信息,但發現它很模糊。我知道,在春天引導版本1.5+的ResourceServerConfigurerAdapter
濾波順序已經改變了,我只設法得到它的屬性設置一個新的訂單後,開始工作:security.oauth2.resource.filter-order=3
作爲更具體的,該代碼(上ResourceServerConfigurerAdapter
)沒有任何結果:
@Override
public void configure(HttpSecurity http) throws Exception {
http.requestMatcher(new OAuthRequestedMatcher())
.anonymous().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers("/api/hello").access("hasAnyRole('USER')")
.antMatchers("/api/me").hasAnyRole("USER", "ADMIN");
}
只可能保護"/api/hello"
和"/api/me"
註釋控制器上的方法@PreAuthorize
:
@PreAuthorize("hasAnyRole('USER','ADMIN')")
@GetMapping("/api/hello")
public ResponseEntity<?> hello() {
String name = SecurityContextHolder.getContext().getAuthentication().getName();
String msg = String.format("Hello %s", name);
return new ResponseEntity<Object>(msg, HttpStatus.OK);
}
它正在工作,但是,我擔心它可以以更好的方式完成。有任何想法嗎?