SpringMvc拦截器小测试

前言

俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题。小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作都是联动操作(都是基于所联动的)那么我后台所做的所有操作都是基于后台用户登录的情况下所做的。但是在联动中中所有页面都是单独存在的,如果要解决这个问题就需要在做操作之前判断用后台用户是否已经登录。想知道小编是如何实现的那就接着往下看。

简介

Spring MVC的拦截器不仅可实现Filter的所有功能,还可以更精确的控制拦截精度。 
Spring为我们提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个适配器,继承此类,可以非常方便的实现自己的拦截器。

preHandle在业务处理器处理请求之前被调用。

postHandle在业务处理器处理请求执行完成后,生成视图之前执行。

afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 。

编码实现

在简单了解了HandlerInterceptorAdapter之后,我们来测试一发。

  1 package com.laifuu.interceptor;
  2
  3
  4
  5 import java.io.IOException;
  6
  7 import javax.servlet.http.HttpServletRequest;
  8
  9 import javax.servlet.http.HttpServletResponse;
 10
 11 import org.apache.log4j.Logger;
 12
 13 import org.springframework.web.servlet.ModelAndView;
 14
 15 import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
 16
 17 import com.laifuu.comm.utils.ExceptionUtils;
 18
 19 import com.laifuu.entity.User;
 20
 21
 22
 23 /**
 24
 25  * @Title: 登陆拦截器
 26
 27  * @Description: TODO
 28
 29  * Company:www.hack-gov.com
 30
 31  * @author: 0nise
 32
 33  * @date: 2017-2-19 上午12:18:19
 34
 35  * @Email [email protected]
 36
 37  * @version: V1.0
 38
 39  */
 40
 41 public class LoginInterceptor extends HandlerInterceptorAdapter {
 42
 43
 44
 45 private static Logger logger = Logger.getLogger(LoginInterceptor.class);
 46
 47 // 白名单URL
 48
 49 private static final String[] IGNORE_URI = {"/login.jsp", "/checkAdminLogin.action","/getVerifyCode.action","/checkVerifyCode.action","/adminLogin.action"};
 50
 51
 52
 53 /* (non Javadoc)
 54
 55  * @Title: 拦截器
 56
 57  * @Description: TODO
 58
 59  * @param request
 60
 61  * @param response
 62
 63  * @param handler
 64
 65  * @return
 66
 67  * @see org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.Object)
 68
 69  */
 70
 71 @Override
 72
 73 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
 74
 75 boolean flag = false;
 76
 77 String url = request.getRequestURI();
 78
 79 // 判断请求路径是否白名单中路径
 80
 81 for (String s : IGNORE_URI) {
 82
 83 if(url.contains(s)){
 84
 85 flag = true;
 86
 87 break;
 88
 89 }
 90
 91 }
 92
 93 if(!flag){
 94
 95 User user = (User)request.getSession().getAttribute("adminUser");
 96
 97 if(user != null){
 98
 99 flag = true;
100
101 }
102
103 }
104
105 try {
106
107 // 如果用户访问的路径不存在并且没有登陆,重定向到登陆页面
108
109 response.sendRedirect("/login.jsp");
110
111 } catch (IOException e) {
112
113 e.printStackTrace();
114
115 //日志记录
116
117 logger.error(ExceptionUtils.getStackTrace(e));
118
119 }
120
121 return flag;
122
123 }
124
125
126
127     @Override
128
129     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
130
131         super.postHandle(request, response, handler, modelAndView);
132
133 }
134
135  @Override
136
137  public void afterCompletion(HttpServletRequest request,
138
139          HttpServletResponse response, Object handler, Exception ex)
140
141          throws Exception {
142
143   }
144
145 }

在代码中设置了URL访问白名单,例如对登录action或者验证码生成以及验证。

写好代码之后我们还需要在spring mvc配置中进行配置拦截器

<!-- 配置拦截器 -->

<mvc:interceptors>

<mvc:interceptor>

<mvc:mapping path="/**"/>

<bean id="loginInterceptor" class="com.laifuu.interceptor.LoginInterceptor" ></bean>

</mvc:interceptor>

</mvc:interceptors>

然后就没有然后了,在进行出了白名单中的action或者url请求时放行其他全部都需要获取用户session信息。

时间: 2024-10-13 08:24:22

SpringMvc拦截器小测试的相关文章

SpringMVC拦截器详解[附带源码分析]

目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. Hand

[转]SpringMVC拦截器详解[附带源码分析]

目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html 拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. Hand

SpringMVC 拦截器理解

SpringMVC 配置拦截器 1. 作为拦截器当然是为了拦截 (这不是废话嘛) 那拦截是为了干嘛? 它可以帮我们拦截未登录用户   验证是否登录.设置日志记录.统计一些接口访问量啊 进行统一异常处理  设置一些数据啊 或者计算下应用接口方法执行效率啊 等等   2. 配置拦截器 由于用的是SpringMVC所以要知道 它是有个统一的 DispatcherServlet 控制器, 所以就不用传统的bean方式了,人家给我们提供了其他简单的方式 如下所示:  (我设置了三个方便测试用的) <!--

SpringMVC拦截器(实现登录验证拦截器)

本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 St

SpringMVC拦截器的使用

SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那样子判断当前时间是否是购票时间. 一.springMVC拦截器的实现方式 springMVC拦截器的实现一般有两种方式:第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口.第二种方式是继承实现了HandlerInterceptor接口的类,比

SpringMVC拦截器(资源和权限管理)-login拦截

SpringMVC拦截器(资源和权限管理) 1.自定义拦截器 SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法.preHandle在业务处理器处理请求之前被调用,    postHandle在业务处理器处理请求执行完成后,生成视图之前执行,afterCompletion在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 .所以要想实现自己的权限管理逻辑,

SpringMVC拦截器_1_拦截器的实现

SpringMVC interceptor:下列参考的blog文章 Spring MVC简介 SpringMVC 拦截器实现原理和登录实现 SpringMVC拦截器详解[附带源码分析] 学习SpringMVC--拦截器 ********************* 1-1 拦截器 拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强. 使用场景:解决请求的共性问题(如:乱码问题,权限验证等) ===2 拦截器的实现========================== ---2-1 拦截器

SpringMVC拦截器2(资源和权限管理)(作为补充说明)

SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServlet.    DispatcherServlet是前置控制器,配置在web.xml文件中的.拦截匹配的请求,Servlet拦截匹配规则要自已定义,把拦截下来的请求,依据某某规则分发到目标Controller来处理.  所以我们现在web.xml中加入以下配置: [html] view plain co

SpringMVC拦截器详解

拦截器是每个Web框架必备的功能,也是个老生常谈的主题了. 本文将分析SpringMVC的拦截器功能是如何设计的,让读者了解该功能设计的原理. 重要接口及类介绍 1. HandlerExecutionChain类 由HandlerMethod和Interceptor集合组成的类,会被HandlerMapping接口的getHandler方法获取. 2. HandlerInterceptor接口 SpringMVC拦截器基础接口. 3. AbstractHandlerMapping Handler