所以我終於回到這個問題再次調查,結果發現解決方案几乎和我的預期一樣簡單。解決方案是有兩個WebSecurityConfigurerAdapter
類。這說明如下:
http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#multiple-httpsecurity
兩件事情要注意這樣做的時候是:
- 的
WebSecurityConfigurerAdapter
類都必須有不同的@Order
值。所以我用@Order(1)
註解其中的一個,強制要求在處理HTTP請求時首先對其進行評估。就我而言,哪一個是第一位並不重要,他們只需要有所不同。
- 這兩個
HttpSecurity
配置需要適用於不同的URL。這是通過爲每個值使用antMatcher()
值來完成的。鑑於提供給@RequestMapping
的值可以是一個URL數組,所以仍然有可能只有一個REST控制器方法處理對這兩個URL的請求。
所以在這裏,他們是:
@Configuration
@EnableWebSecurity
@Order(1)
public class APISecurityConfig extends WebSecurityConfigurerAdapter {
@Override
@Order(1)
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().fullyAuthenticated().and()
.httpBasic().and()
.csrf().disable();
}
}
而且
@Configuration
@EnableWebSecurity
public class UISecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/ui/**").authenticated();
}
}