前言
依然是我负责的认证模块,出现了业务上的问题,想要使某些接口不走过滤链,但是再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/**");
}
如此,比上一个方法好了不止一点点。
希望可以帮助到大家。