1. 程式人生 > >Spring Security配置多個HttpSecurity

Spring Security配置多個HttpSecurity

我們可以通過繼承WebSecurityConfigurationAdapter 去配置多個HttpSecurity例項,例如,下面是一個以/api/開頭的url的不同配置的示例:

@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(); } } }
  1. 正常配置一個基於記憶體的使用者和許可權資訊
  2. 建立一個WebSecurityConfigurerAdapter的例項並在類上面加上@Order註解,用於明確提出應該首先使用哪個WebSecurityConfigurerAdapter例項。
  3. 這個http.antMatcher確定了這個HttpSecurity將使用以/api/開頭的URL。
  4. 再配置其他WebSecurityConfigurerAdapter的例項,如果這個URL不是以/api/開頭將被使用。這個配置在ApiWebSecurityConfigurationAdapter之後被呼叫,因為在@Order註解的value = 1(沒有新增@Order註解預設在最後呼叫)。