SpringMVC配置拦截器

本文介绍了SpringMVC中的拦截器概念,用于拦截URL请求并在Handler方法前后插入特定操作。详细讲解了拦截器的开发过程,包括实现HandlerInterceptor接口并在配置文件中设置。此外,还通过一个登陆验证拦截器的实战例子,展示了如何检查session中的用户信息来控制访问权限,防止未登录用户访问系统功能。要注意拦截器的执行顺序和匿名访问的处理。

一、拦截器的概念

SpringMVC 中的 Interceptor 拦截器的主要作用就是拦截用户的 url 请求,并在执行 handler 方法的前中后加入某些特殊请求,类似于 servlet 里面的过滤器。

二、拦截器的开发

  • 定义一个拦截类,实现HandlerInterceptor接口

    package com.qjl.ssm.sysmanage.interceptor;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    public class InterceptorTest1 implements HandlerInterceptor {
    
    	// 在执行handler方法之前,运行这个方法里面的代码
    	@Override
    	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
    		System.out.println("pre1");
    		return true;
    	}
    	
    	// 在执行handler方法中,返回modelAndView之前,运行这个方法里面的代码
    	// 比如微商
    	@Override
    	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object obj, ModelAndView mv)
    			throws Exception {
    		System.out.println("post1");
    	}
    	
    	// handler方法之后
    	// 计算某个handler方法的执行时间
    	// 进行统一的日志记录
    	@Override
    	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception exp)
    			throws Exception {
    		System.out.println("after1");
    	}
    }
    
  • 在springmvc.xml里面进行配置

<?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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    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/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd
    	http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">
	
	<!-- 只加载Controller层的bean -->
	<context:component-scan base-package="com.qjl.ssm" use-default-filters="false">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	</context:component-scan>
	
	<mvc:annotation-driven />
	
	<mvc:interceptors>
		<mvc:interceptor>
			<!-- mapping和bean必须按照这个顺序 -->
			<mvc:mapping path="/**"/>
			<bean class="com.qjl.ssm.sysmanage.interceptor.InterceptorTest1"></bean>
		</mvc:interceptor>
	</mvc:interceptors>
	
	<mvc:resources location="/jsAndCss/" mapping="/jsAndCss/**"></mvc:resources>
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/pages/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
	
</beans>

总结:当我们的 preHandler 方法返回false时,剩下的两个方法不执行,而且 handler 也不执行拦截器里面的 preHandler, postHandler 和 afterCompletion 方法是按顺序执行。
当有多个拦截器同时存在时,如果有任意一个拦截器的 preHandler 方法返回 false ,则剩下的不执行。
如果多个拦截器同时运行 ( preHandler 方法返回 true ), 那么 preHanlder 方法是按顺序执行,而其余两个方法是按倒序执行。
拦截器的执行顺序是按照在 springmvc 配置文件中的位置来顺序执行的。

三、登陆验证拦截器实战

需求:只要登陆过的用户才有权限访问系统中的功能
步骤::

  • 在登陆成功后,将用户信息放入 session。
  • 当除了登陆验证的 url 请求的其他 url 请求时,在拦截器的 preHandler 方法里面判断 session 是否有用户信息, 如果有, 则放行通过, 如果没有 , 跳转到登陆页面,提示用户登陆。

注意:匿名访问问题,不要把登录验证的请求给拦了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值