新建Class,并且实现 HandlerInterceptor
![](https://i-blog.csdnimg.cn/blog_migrate/51615170307cba9132391212231988d5.png)
在 preHandle 完成相应的规则判断
通过该方法,可以实现对指定请求之外的请求实施拦截。也可以和redis一起组合实现多端同时在线或者不可同时在线的功能
//在请求处理之前进行调用(Controller方法调用之前
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
// System.out.println("preHandle被调用");
// 所有请求第一个进入的方法
String reqURL = httpServletRequest.getRequestURL().toString();
String ip = httpServletRequest.getRemoteHost();
if (o instanceof HandlerMethod) {
HandlerMethod h = (HandlerMethod) o;
// //app session认证,如果是app端请求,且session为空,则请求拦截
if(httpServletRequest.getRequestURI().indexOf("/app/") != -1 && !FilterPath.findFilterPath().contains(httpServletRequest.getServletPath())){
String sessionId = httpServletRequest.getHeader("sessionId");
if(StringUtils.isNotNull(sessionId) && redisUtils.hasKey(sessionId)){
//请求成功,则重新设置时间
// redisUtils.set(sessionId, UUID.randomUUID().toString().replace("-", "").toString()+ "_" +DateUtils.getTime(),432000L);
redisUtils.set(sessionId, StringUtils.substringBefore(redisUtils.get(sessionId).toString(),"_")+ "_" +DateUtils.getTime(),432000L);
//用户在线更新
String userId = sessionId.substring(sessionId.indexOf("_") + 1, sessionId.lastIndexOf("_"));
if(StringUtils.isNotEmpty(userId)){
redisUtils.set("userOnLine:userOnLine_" + userId, userId, 900L);
}
}else{
returnMsg(httpServletResponse,"please_re_login");
return false;
}
}
if(Global.getRequestLog()){
logger.info("-------------------------------------" + DateUtils.dateTimeNow("yyyy-MM-dd HH:mm:ss") + "------------------------------");
logger.info("Controller : " + h.getBean().getClass().getName());
StringBuilder sb = new StringBuilder();
sb.append(h.getBean().getClass().getName()).append(".(").append(h.getBean().getClass().getSimpleName()).append(".java:1)");
logger.info("Class : " + sb.toString());
logger.info("请求路径 : " + httpServletRequest.getServletPath());
logger.info("方法名称 : " + h.getMethod().getName());
logger.info("请求方式 : " + httpServletRequest.getMethod());
logger.info("请求参数 : " + getParamString(httpServletRequest.getParameterMap()));
logger.info("URL : " + reqURL);
logger.info("请求方ip : " + ip);
logger.info("---------------------------------------------------------------------------------------");
}
}
return true;
}
请作者喝咖啡
![](https://i-blog.csdnimg.cn/blog_migrate/7818e313e62eb2790f6ec3d2434afba7.png)