码迷,mamicode.com
首页 > 编程语言 > 详细

SpringMvc拦截器小测试

时间:2017-02-19 23:55:48      阅读:483      评论:0      收藏:0      [点我收藏+]

标签:页面   bre   资源   break   精确   ppi   intercept   lib   final   

前言 

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

简介

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

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

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

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

编码实现

在简单了解了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 woo0nise@gmail.com
 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信息。

SpringMvc拦截器小测试

标签:页面   bre   资源   break   精确   ppi   intercept   lib   final   

原文地址:http://www.cnblogs.com/0nise/p/6417767.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!