2016-09-11 115 views
0

我有一個現有的Web應用程序使用spring security進行身份驗證。它也使用會話管理來允許用戶登錄一段預定的時間,並使用XSRF令牌來防止XSS攻擊。Spring安全會話/ xsrf路徑配置

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    // @formatter:off 
    http 
    .exceptionHandling() 
     .authenticationEntryPoint(restEntryPoint()) 
    .and() 
    .headers().addHeaderWriter(new StaticHeadersWriter("Server","")) 
    .and() 
    .httpBasic() 
     .authenticationEntryPoint(restEntryPoint()) 
    .and() 
    .logout().addLogoutHandler(myLogoutHandler()) 
    .logoutSuccessHandler(logoutSuccessHandler()) 
    .and() 
    .authorizeRequests() 
     .antMatchers("/index.html", "/login", "/").permitAll() 
     .antMatchers(HttpMethod.OPTIONS).denyAll() 
     .antMatchers(HttpMethod.HEAD).denyAll() 
     .anyRequest().authenticated() 
    .and() 
    .authenticationProvider(myAuthenticationProvider) 
     .csrf() 
      .csrfTokenRepository(csrfTokenRepository()) 
    .and() 
    .addFilterAfter(csrfHeaderFilter(), SessionManagementFilter.class); 
    // @formatter:on 
} 

這對Web應用程序非常有用。然而,現在我被要求添加一個配置,允許第三方客戶端應用程序通過純REST調用來調用我的服務,也就是說它們應該是完全無狀態的並且使用http基本認證 - 不應該創建任何會話,並且應該禁用xsrf(I認爲...)。

我可以爲所有這些客戶端API調用定義一個共享URL路徑。但是,我如何利用現有的安全配置和服務器來支持這兩種需求?

回答

0

回答我的問題...

春季安全允許您使用基於順序多種配置。在本文檔中,它提供了以下示例:

@EnableWebSecurity 
public class MultiHttpSecurityConfig { 
    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) { 1 
     auth 
      .inMemoryAuthentication() 
       .withUser("user").password("password").roles("USER").and() 
       .withUser("admin").password("password").roles("USER", "ADMIN"); 
    } 

    @Configuration 
    @Order(1)              2 
    public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter { 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
       .antMatcher("/api/**")        3 
       .authorizeRequests() 
        .anyRequest().hasRole("ADMIN") 
        .and() 
       .httpBasic(); 
     } 
    } 

    @Configuration             4 
    public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { 

     @Override 
     protected void configure(HttpSecurity http) throws Exception { 
      http 
       .authorizeRequests() 
        .anyRequest().authenticated() 
        .and() 
       .formLogin(); 
     } 
    } 
} 

在上述示例中,/ API將只允許用於ADMIN角色,而其它路徑將與缺省FormLoginWebSecurityConfigurerAdapter進行配置。

查看更多的在this URL