前言
依然是我負責的認證模塊,出現了業務上的問題,想要使某些接口不走過濾鏈,但是再security上配置
.antMatchers("/**").permitAll()
之後,前端訪問進來,依然會走我的 token 過濾器
public class JWTAuthorizationFilter extends BasicAuthenticationFilter {
...
}
解決方法一
嘗試過,在獲取到token爲空的時候,判斷一下請求地址是不是某些不需要token的接口,例如 短信驗證碼接口
// 如果請求頭中沒有token信息則直接放行了
if (null == authorization || ("").equals(authorization)
|| ("null").equals(authorization)|| userType == null) {
if(request.getServletPath().equals("/login/verificationCode")){
chain.doFilter(request, response);
return;
}
this.responseMsg(RestResult.failure(ErrorCode.SYS_ERROR),response);
return;
}
這樣子做看起來是可以解決問題,但是也引起了其他問題,例如後期的擴展太麻煩,我需要不斷的往if裏面塞東西,就覺得很傻*,於是有了第二種想法。
解決方法二
配置某些接口直接不進入過濾鏈,在security的config中配置
@Override
public void configure(WebSecurity web) {
//解決靜態資源被攔截的問題
web.ignoring().antMatchers("/login/verificationCode","/images/**");
}
如此,比上一個方法好了不止一點點。
希望可以幫助到大家。