@Component
public class MyInterceptor implements HandlerInterceptor {
private static Logger logger = LoggerFactory.getLogger(MyInterceptor.class);
@Autowired
private CacheService cacheService;
private static final String UNAUTHORIZED_URI = "/unauthorized";
private static final String AUTHORIZATION_INVALID_URI = "/auth/invalid";
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String referer = request.getHeader("referer");
try {
String isDevModel = cacheService.isDevModel();
if (StringUtil.isBlank(referer)) {
// 非测试模式,无访问来源
if (!Constants.DEV_MODEL.equalsIgnoreCase(isDevModel)) {
logger.warn(">>>>>> referer is blank:" +
",RequestURL=" + request.getRequestURL() +
",QueryString=" + request.getQueryString() +
",RemoteAddr=" + request.getRemoteAddr());
return false;
}
}
// 非开发模式需要校验访问来源
if (!Constants.DEV_MODEL.equalsIgnoreCase(isDevModel)) {
// 域名
String requestUrl = referer.split("/")[2];
// 白名单
List<String> whiteList = cacheService.getwhiteList();
boolean isInWhiteList = false;
if (whiteList .contains(requestUrl)) {
isInWhiteList = true;
}
if (isInWhiteList == false) {
logger.warn(">>>>>> Access source addresses are not on the whitelist:referer=" + referer +
",RequestURL=" + request.getRequestURL() +
",QueryString=" + request.getQueryString() +
",RemoteAddr=" + request.getRemoteAddr());
response.sendRedirect(UNAUTHORIZED_URI);
return false;
}
}
String requestURI = request.getRequestURI();
Class<?> clazz = ((HandlerMethod) handler).getBean().getClass();
String className = ((HandlerMethod) handler).getBean().getClass().getName();
String methodName = ((HandlerMethod) handler).getMethod().getName();
logger.info(">>>>>> clazz:" + clazz + ", className :" + className + ", methodName :" + methodName );
if (LoginController.class == clazz) {
return true;
} else {
String token = request.getHeader(Constants.ACCESS_TOKEN);
if (StringUtil.isBlank(token)) {
token = request.getParameter(Constants.ACCESS_TOKEN);
}
if (StringUtil.isBlank(token)) {
logger.warn(">>>>>> The token is blank: referer=" + referer +
",RequestURL=" + request.getRequestURL() +
",QueryString=" + request.getQueryString() +
",RemoteAddr=" + request.getRemoteAddr());
response.sendRedirect(UNAUTHORIZED_URI);
return false;
}
if (!ActionContextUtil.isExists(token)) {
logger.warn(">>>>>> The token is invalid: eferer=" + referer +
",RequestURL=" + request.getRequestURL() +
",QueryString=" + request.getQueryString() +
",RemoteAddr=" + request.getRemoteAddr());
response.sendRedirect(AUTHORIZATION_INVALID_URI);
return false;
}
ActionContext context = ActionContextUtil.getActionContext(token);
ActionContextUtil.setContext(context);
return true;
}
} catch (Exception e) {
ResultBean resultBean = new ResultBean();
resultBean.setStatus(StatusEnum.SYSTEM_ERROR);
response.getOutputStream().write(JSONUtil.convertObjectToJSON(resultBean).getBytes(StandardCharsets.UTF_8));
logger.error(">>>>>> error referer=" + referer +
",RequestURL=" + request.getRequestURL() +
",QueryString=" + request.getQueryString() +
",RemoteAddr=" + request.getRemoteAddr(), e);
return false;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView
modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception
ex) throws Exception {
}
}
自定义拦截器HandlerInterceptor
最新推荐文章于 2024-04-07 15:49:15 发布