關於springboot security自定義攔截器 使用 permitAll() 之後仍然會走過濾器的解決方法

前言

依然是我負責的認證模塊,出現了業務上的問題,想要使某些接口不走過濾鏈,但是再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/**");
    }

如此,比上一個方法好了不止一點點。

希望可以幫助到大家。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章