springMVC配置拦截器

1,拦截器的概念
    java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截然后再之前或者之后加入某些操作。目前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不用深究,知道即可。

2,实现方法

      我们如果在项目中使用了Spring框架,那么,我们可以直接继承HandlerInterceptorAdapter.java这个接口,来实现我们自己的拦截器。

先看看HandlerInterceptorAdapter.java这个抽象类

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.web.servlet;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface HandlerInterceptor {
    //在业务处理器处理请求之前执行
    boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;
    //业务处理器处理请求之后,生成视图之前执行
    void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;
    // 在DispatcherServlet完全处理完请求之后被调用,可用于清理资源
    void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;
}

4:自定义拦截器类继承HandlerInterceptorAdapter.java这个接口

package com.yc.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * @author wk
 * @date 2019/9/17  15:29
 */
public class BackForwardInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse, Object o) throws Exception {
        //获取请求的可用地址
        String path = httpServletRequest.getServletPath();
        path = path.substring(path.lastIndexOf("ded")+1);
        HttpSession session = httpServletRequest.getSession();
        //判断用户是否登录
        session.setAttribute("path",path);
        Integer uid =  (Integer)session.getAttribute("user");
        //内部转发
        if (uid != null ) {
            return true;
        }
        // 跳转到登录页面  
            request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response); 
        return false;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest,
                           HttpServletResponse httpServletResponse, Object o,
                           ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                                HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

5,配置springmvc.xml文件即可

<!--拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!-- 需要拦截的请求 -->
            <mvc:mapping path="/order/findAll"/>
            <mvc:mapping path="/order/add"/>
            <bean class="com.yc.interceptor.BackForwardInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

 

posted @   昨夜风雨声  阅读(18)  评论(0编辑  收藏  举报  
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示