package com.jykj.comutils.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.jykj.comutils.utils.SpringContextHolder;
import com.jykj.controller.manager.base.BaseLoginUserController;
import com.jykj.po.basicinfo.BaseLoginUserInfo;
import java.util.regex.*;
/**
* 项目名称:LogManager
* 类名称:LoginInterceptor
* 类描述:对用户登录的时候身份一个验证功能
* 创建人:常鹏
* 创建时间:2018年5月8日 下午4:11:33
* 修改人:
* 修改时间:2018年5月8日 下午4:11:33
* 修改备注:
* @version
*
*/
public class LoginInterceptor implements HandlerInterceptor
{
// 不进行拦截的url,如:首页,登陆功能等
private static final String[] IGNORE_URI = {
"/index/"
};
/**
* 预处理操作 在进入handler之前进行的操作
* 返回值: 如果返回值为false,那么不执行接下来的操作。如果返回值为true,那么继续往下执行
*/
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception
{
String applicationName = "/"+ request.getContextPath().split("/")[request.getContextPath().split("/").length - 1] ;
// 获取用户的请求路径
// 获取请求路径
String requestURL = request.getRequestURL().toString();
// 如果直接是根目录请求 那么就是直接进入了登录页 放行
if(requestURL.endsWith(applicationName)){
return true;
}
String url = request.getRequestURI();
// 定义变量 判断是否请求路径在不拦截列表,存在就直接放行
boolean flag = false;
for (String s : IGNORE_URI) {
if(Pattern.matches(s, url))
{
flag = true;
break;
}
/* if (url.equals(s)) {
flag = true;
break;
}*/
}
if(!flag){
HttpSession session = request.getSession();
BaseLoginUserInfo userBaseInfo = (BaseLoginUserInfo) session.getAttribute("userInfo");
if(userBaseInfo==null){
// 用户没有登录 重定向到登录页面
response.sendRedirect("/");
}else{
// 假如用户已经登录 那么就将用户的登录信息往后延时两个小时
Integer userId = userBaseInfo.getUserId();
BaseLoginUserController baseLoginUserController = SpringContextHolder.getBean("baseLoginUserController");
baseLoginUserController.updUserExpireDate(userId);
flag = true;
}
}
return true;
}
/**
* 在进入handler方法之后 在返回ModelAndView方法之前进行的操作
* 应用场景:此处可以存放一些公用的数据到ModelAndView里面去
*/
@Override
public void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception
{
}
/**
* 在handler执行完成之后执行的动作
* 应用场景:可以执行统一的异常处理,日志处理
*/
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception
{
}
}
这是同事所写的拦截器,给自己做做记录。