您当前的位置: 首页 >  spring

浅谈SpringMVC中的拦截器控件

发布时间:2019-08-07 21:25:25 ,浏览量:9

1.拦截器的概念

拦截器是 Spring MVC 中的一种十分强大的控件,它可以在进入处理器之前或者在处理器完成后做一些操作,也可以在视图渲染完成后进行操作。(本篇主要讨论的是 Spring4 版本中的拦截器以及开发一个登录拦截器的小例子)

Spring 要求处理器的拦截器都要实现或间接 org.springframework.web.servlet.HandlerInterceptor 接口,在该接口中定义了 3 个方法,其代码如下所示:

public interface HandlerInterceptor { boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception; void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception; void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception; } 

这 3 个方法的具体意义如下:

preHandle 在处理器之前执行的前置方法,SpringMVC可以在进入处理器前处理一些方法。其返回值为boolean型 postHandle 在处理器之后执行的后置方法,处理器的逻辑完成后运行它。 afterCompletion 无论是否产生异常都会在视图渲染完成之后执行的方法。 2.拦截器的执行过程

了解拦截器的执行过程有助于我们更好地理解它。 在这里插入图片描述

注意:对于 preHandler 方法的返回值,当返回 false 时,不再继续执行后面的操作; 当返回 true 时,继续执行后面的操作

3.开发拦截器

由拦截器的设计要求可知,拦截器必须实现 HandlerInterceptor 接口。SpringMVC 的拦截器设计如下图所示:

在这里插入图片描述

下面来举一个简单的使用到拦截器的小例子。在开发一些具有登录功能的web应用(使用SSM框架)时,我们可以使用拦截器来帮助后台验证当前访问某个地址的用户是否已经登录。若没有登录,则直接返回到登录页面,阻止当前的操作;若已经登录,则允许接下来的操作。这样一来可以防止非登录用户直接访问其他页面。

3.1.定义登录拦截器
package com.web; import com.bean.User; 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; //登录拦截器 public class LoginInterceptor implements HandlerInterceptor{ /*在拦截器拦截之前判断是否之后的操作
    * @return false:不再继续执行后面的操作
    *         true:继续执行后面的操作
    * */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //判断当前的用户是否已经登录 HttpSession session = request.getSession(); User loginUser = (User)session.getAttribute("loginUser"); if(loginUser == null){ String path = session.getServletContext().getContextPath(); response.sendRedirect(path + "/login"); return false; }else{ return true; } } //在拦截器拦截完毕之后进行的操作 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } //在完成视图渲染之后进行的操作 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } } 
3.2.在SpringMVC的配置文件(例如dispatcher-servlet.xml)中添加相应的配置
<mvc:interceptors>  <mvc:interceptor>  <mvc:mapping path="/**"/>  <mvc:exclude-mapping path="/login"/> <mvc:exclude-mapping path="/doAjaxLogin"/> <mvc:exclude-mapping path="/bootstrap/**"/> <mvc:exclude-mapping path="/css/**"/> <mvc:exclude-mapping path="/jquery/**"/> <bean class="com.web.LoginInterceptor">            
关注
打赏
1688896170
查看更多评论

暂无认证

  • 9浏览

    0关注

    105695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.4084s