2015-06-30 40 views
0

我試圖站在基於Spring Boot的Web服務器上,它支持基於安全會話的UI,包括CSRF保護和無狀態訪問通過基本身份驗證進行身份驗證,並且不需要CSRF。我試圖支持的兩個用例是一個標準的AngularJS UI和一個簡單的REST API,可以在每個請求上進行身份驗證。Spring Boot Web應用程序帶有會話+ CSRF和無狀態基本身份驗證無CSRF

有誰知道如何配置這個?我見過很多使用其中一個的例子,但不是兩者結合在一起。

回答

0

所以我終於回到這個問題再次調查,結果發現解決方案几乎和我的預期一樣簡單。解決方案是有兩個WebSecurityConfigurerAdapter類。這說明如下:

http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#multiple-httpsecurity

兩件事情要注意這樣做的時候是:

  1. WebSecurityConfigurerAdapter類都必須有不同的@Order值。所以我用@Order(1)註解其中的一個,強制要求在處理HTTP請求時首先對其進行評估。就我而言,哪一個是第一位並不重要,他們只需要有所不同。
  2. 這兩個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(); 
    } 
} 
相關問題