SpringMVC拦截器实现登录权限控制

简介: SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于 web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个 controller生命周期之内可以多次调用。

Controller

1.什么是拦截器

SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于
web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个
controller生命周期之内可以多次调用。

2.拦截器与过滤器

2.1 什么是过滤器(Filter)
 
    依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例
只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,比如:在过滤器中修改字符编码;
在过滤器中修改HttpServletRequest的一些参数,包括:过滤低俗文字、危险字符等。
   
2.2 拦截器与过滤器的区别

    过滤器(filter):

1) filter属于Servlet技术,只要是web工程都可以使用
2) filter主要对所有请求过滤
3) filter的执行时机早于Interceptor

拦截器(interceptor)

1) interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
2) interceptor通常对处理器Controller进行拦截
3) interceptor只能拦截dispatcherServlet处理的请求

3.应用场景

1)日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。

2)权限检查:如登录检测,进入处理器检测是否登录,如果没有直接返回到登录页面;

3)性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);

4)通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个Controller中的处理方法都需要的,我们就可以使用拦截器实现。

4.拦截器快速入门

4.1 入门案例

创建HelloController
创建自定义拦截器并实现HandlerInterceptor接口。

<mvc:interceptors>
    <bean class="com.zking.springmvc07.interceptor.CustomInterceptor"/>
</mvc:interceptors>

4.2 拦截器方法说明

详见《自定义拦截器执行流程.png》

preHandle方法
作用:用于对拦截到的请求进行预处理,方法接收布尔(true,false)类型的返回值,返回true:放行,false:不放行。
执行时机:在处理器方法执行前执行 
方法参数:
1)request请求对象
2)response响应对象
3)handler拦截到的方法处理

postHandle方法
作用:用于对拦截到的请求进行后处理,可以在方法中对模型数据和视图进行修改
执行时机:在处理器的方法执行后,视图渲染之前
方法参数:
1)request请求对象
2)response响应对象
3)handler拦截到的处理器方法
4)ModelAndView处理器方法返回的模型和视图对象,可以在方法中修改模型和视图

afterCompletion方法
作用:用于在整个流程完成之后进行最后的处理,如果请求流程中有异常,可以在方法中获取对象
执行时机:视图渲染完成后(整个流程结束之后)
方法参数:
1)request请求参数
2)response响应对象
3)handler拦截到的处理器方法
4)ex异常对象

5.拦截器链(多拦截器)

  拦截器链的概念:如果多个拦截器能够对相同的请求进行拦截,则多个拦截器会形成一个拦截器链,主要理解拦截器链中各个拦截器的执行顺序。拦截器链中多个拦截器的执行顺序,根拦截器的配置顺序有关,先配置的先执行。

<mvc:interceptors>

  <mvc:interceptor>
      <mvc:mapping path="/**"/>
      <bean class="com.zking.springmvc07.interceptor.CustomInterceptor"/>
  </mvc:interceptor>
  <mvc:interceptor>
      <mvc:mapping path="/user/**"/>
      <bean class="com.zking.springmvc07.interceptor.Custom2Interceptor"/>
  </mvc:interceptor>

</mvc:interceptors>

相关文章
|
6月前
|
Java 应用服务中间件 Spring
SpringMVC快速入门加登录流程分析
SpringMVC快速入门加登录流程分析
65 0
|
6月前
SpringMVC-登录验证判断
`SpringMVC`登录验证实现:创建`LoginInterceptor`拦截器检查`session`中的`LoginInfo`,未登录则重定向至登录页。配置拦截器,路径为`/**`和`/user/**`。`LoginController`处理登录、注销请求,登录成功后将用户信息存入`session`。未登录访问受限页面时,显示登录页面。
37 2
|
存储 前端开发 Java
Spring MVC 实战:三种方式获取登录用户信息
前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie、Session、Token,不管哪种方案,都需要获取到用户信息供业务层使用。
474 0
Spring MVC 实战:三种方式获取登录用户信息
SpringMVC 如何使用注解完成登录拦截
SpringMVC 如何使用注解完成登录拦截
SpringMVC 如何使用注解完成登录拦截
|
Java 数据安全/隐私保护
SpringMVC+Spring+Mybatis实现登录注册Demo
SpringMVC+Spring+Mybatis实现登录注册Demo
323 0
SpringMVC+Spring+Mybatis实现登录注册Demo
|
前端开发 JavaScript Java
java SpringMVC Filter登录拦截器
java SpringMVC Filter登录拦截器
166 0
|
前端开发 索引
springmvc-ajax-jquery 异步校验登录【亲测可用】
前言 一直以来都是直接提交form跳转登录,但是存在一些问题就是当密码错误的时候,又得重新跳转回来。感觉不是很理想。故采用异步校验是比较稳妥的一种处理的方式。 具体过程 jsp页面的编写 关键性代码如下 &lt;form name="subinfo" class="form" method="post"&gt; &lt;div&gt;
1884 0
|
XML 前端开发 Java
SpringMVC登录案例
学习了一周的springMVC 今天搭建一个SpringMVC的登录案例 主要是用来巩固一下拦截器的是使用。 1.首先配置web.xml 配置 主要是配置encodingfilter和dispatcher &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;web-app xmlns="http://xmlns.jcp.
1334 0