自定义@NoAuth注解跳过登录验证
注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoAuth {
}
全局拦截处理器:
@Component
@Slf4j
public class GlobalInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
// 跳过验证
if (method.getAnnotation(NoAuth.class) != null) {
return true;
}
LoginUserModel loginUserModel = new LoginUserModel();
loginUserModel.setUserCode(getHeaderValue(request, "USER_CODE"));
loginUserModel.setUsername(getHeaderValue(request, "USER_NAME");
loginUserModel.setIpAddress(getHeaderValue(request, "IP_ADDRESS");
log.info("GlobalInterceptor.preHandle,loginUserModel:{}", loginUserModel);
LoginUserContext.setLoginUser(loginUserModel);
return true;
}
private String getHeaderValue(HttpServletRequest request, String headerName) {
String headerValue = request.getHeader(headerName);
if (headerValue != null && headerValue.length() != 0) {
try {
return URLDecoder.decode(headerValue, "utf-8");
} catch (UnsupportedEncodingException e) {
log.error("GlobalInterceptor.getReqHeaderValue,请求头参数转码失败");
return null;
}
}
return null;
}
}