HandlerInterceptor 拦截器的使用

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
    {
    }


}

这是同事所写的拦截器,给自己做做记录。

猜你喜欢

转载自blog.csdn.net/weixin_40620337/article/details/81557043