欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC 自定义拦截器 Interceptor

程序员文章站 2022-05-30 20:41:11
...

 

 

SpringMVC 自定义拦截器 Interceptor

 

SpringMVC 自定义拦截器 Interceptor

 

 

SpringMVC 自定义拦截器 Interceptor

如上图所示,使用了mvc的标签库。本地引入路径。

 

自定义SpringMVC 自定义拦截器 Interceptor拦截器Interceptor。

1:实现HandlerInterceptor(import org.springframework.web.servlet.HandlerInterceptor;)

preHandle:执行Controller处理方法前执行

postHandle:执行Controller处理方法后,页面渲染前执行

afterCompletion:页面渲染后执行

//自定义登陆拦截器
public class LoginInterceptor implements HandlerInterceptor{
      //preHandle方法:在执行Controller的处理方法之前被执行LoginInterceptor 的preHandle方法。
      //执行一些初始化,权限判断,日志等处理。  如果返回false 将不会执行Controller中的处理方法
    	@Override
    	public boolean preHandle(HttpServletRequest req, HttpServletResponse resp,
    			Object object) throws Exception {
       //登陆拦截器:
       //1:判断session中是否有值,若有值,则执行Controller的处理方法。
       //2:若session中没有值。判断请求是否访问登陆页面login.do或者跳转登陆页面toLogin.do。若是,则执行Controller的处理方法。
       //3:跳转至登陆页面。不执行Controller的处理方法。
		HttpSession session = req.getSession();
		if(session.getAttribute("user")!=null)
			return true;
		String path=req.getRequestURI();
		if(path.endsWith("toLogin.do")||path.endsWith("login.do"))
			return true;
		resp.sendRedirect("toLogin.do");
		return false;
	}

   //在Controller处理方法执行之后,在被渲染之前 执行 。关闭,释放,处理一些Controller执行中需要的资源
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2, ModelAndView arg3) throws Exception {
	}
	
   //在渲染器渲染后被执行。处理一个请求后的一些清理
	@Override
	public void afterCompletion(HttpServletRequest arg0,
			HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
	}
}

 

2:Interceptor拦截器在xml 中的配置

添加标签库关注如下:

xmlns:mvc="http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

 

主要关注<mvc:interceptors>标签中的内容。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd 
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 配置handerAdapter  适配器 -->
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
   
	<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <!-- 将视图名 渲染后视图的前缀 -->
	    <property name="prefix" value="/WEB-INF/jsp/"/>
	    <!-- 渲染后视图的后缀 -->
	    <property name="suffix" value=".jsp"/>
	    <!-- 例:视图名为:hello   渲染后:/WEB-INF/jsp/hello.jsp 该页面-->
	</bean>
 
 
	<!-- spring容器扫描指定包下的所有类,如果类上有注解  那么根据注解产生相应bean对象已经映射信息 -->
	<!-- 拦截器的配置 -->
	<mvc:interceptors>
	<!-- 在 mvc:interceptors中可以配置多个拦截器,多个拦截器按顺序一一执行-->
		<mvc:interceptor>
          <!-- 指明哪些请求需要被拦截 /login.do 表示login.do需要被拦截 /user/add.do 表示/user/add.do请求要被拦截 -->
          <!-- /* 表示项目路径下的所有请求被拦截, 可以拦截: /login.do  /add.do  /user.do /sys.do等 -->
          <!-- /** 表示项目路径及其子路径下的所有请求被拦截=所有请求被拦截。 可以拦截: /login.do  /add.do  /user.do /sys.do /user/add.do -->
          <mvc:mapping path="/**"/>
          <!-- 指定拦截器的位置 -->
          <bean class="cn.sxt.interceptor.LoginInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
	
 
	<context:component-scan base-package="cn.sxt.controller"/>
</beans>