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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了