Keep it simple, stupidhtml
@Override
public void configure(WebSecurity web) {
web.ignoring()
.antMatchers(HttpMethod.OPTIONS, "/**")
.antMatchers("/app/**/*.{js,html}")
.antMatchers("/i18n/**")
.antMatchers("/swagger-ui/index.html")
.antMatchers("/test/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(http401UnauthorizedEntryPoint())
.and()
.csrf()
.disable()
.headers()
.disable()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/auth/**").permitAll()
.antMatchers("/actuator/**").access(actuatorExp)
.antMatchers("/user/register/").hasAuthority(AuthoritiesConstants.API_REGISTER.getValue())
.antMatchers("/**").hasAuthority(AuthoritiesConstants.USER.getValue())
.antMatchers("/pick/**").hasAuthority(AuthoritiesConstants.PICKER.getValue())
.and()
.securityContext()
.securityContextRepository(new NullSecurityContextRepository())
.and()
.apply(securityConfigurerAdapter());
if (verificationSecurityConfigurer != null) {
http.apply(verificationSecurityConfigurer);
}
}
複製代碼
WebSecurity 與 HttpSecurity 什麼關係, 能不能統一到一塊兒配置?java
HttpSeecurity 的配置從上到下沒有層次感, 須要瞭解足夠多的內部配置信息才能準確配置.web
"Explicit is better than implicit", Spring Security 默認啓用的配置10+, 都是隱式配置, 可是須要顯式的 disable .安全
下面也許更好session
http
.apply(sessionConfigurer)
.apply(csryConfigurer)
.apply(contextConfigurer)
.apply(authorizeConfigurer)
.apply(customConfigurer)
複製代碼
實現獲取 Token, 驗證, 受權, 訪問控制使用的都是 Filter. 並且 Filter 仍是 Servlet 規範的 Filter , 對使用者而言, 難免混淆.app
Filter 過於強大(強大到能夠基於 FIlter 實現 Struts2 框架 ), 而 Spring Security 並未對此設限.框架
以異常處理來作業務邏輯. 這個也是不得已爲之, 畢竟基於 Filteride
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
複製代碼
Filter 的核心方法 doFilter 是沒有返回值的 以異常處理作業務處理的問題, 就是重拾萬惡的GOTO 語句優化
固然, Spring Security 被普遍使用的緣由在於它確實能夠知足用戶的安全需求, 儘管並很差用. 有沒有更簡單的安全框架, 也許 Shiro 是個不錯的選擇, 但我的並無進一步瞭解, 此處不表.ui
因爲 Spring Security 是 Spring 官方默認實現, 在很長的一段時間內, 依然會是主流, 若是不能反抗, 那就享受吧.