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


}

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

在Java中,HandlerInterceptor拦截器是用来拦截请求并进行处理的。以下是使用HandlerInterceptor拦截器的步骤: 1. 声明一个拦截器类,实现HandlerInterceptor接口,并重写相应的拦截方法。可以参考引用中的LoginInterceptor类的示例。 2. 在拦截器类中,根据需要重写preHandle方法,在该方法中可以进行一些前置处理,如验证用户登录状态等。如果需要拦截登录之后才能访问的资源页面,可以在preHandle方法中进行相应的判断和处理。 3. 在配置类中(一般是通过@Configuration注解标识的类),注册拦截器对象。可以参考引用中的LoginInterceptorConfig类的示例。需要实现WebMvcConfigurer接口,并在addInterceptors方法中进行拦截器的注册。 4. 在addInterceptors方法中,创建拦截器对象,并定义一个集合来存储将不进行过滤的资源路径。使用addPathPatterns方法添加需要拦截的资源路径,使用excludePathPatterns方法添加不需要拦截的资源路径。 通过以上步骤,就可以使用HandlerInterceptor拦截器来对请求进行拦截和处理了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [handlerInterceptor拦截器的解析及使用](https://blog.csdn.net/weixin_46038915/article/details/124142136)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [java拦截器](https://download.csdn.net/download/qq_40675079/10689996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值