Spring MVC,拦截器实现session控制

未登录,不允许访问background文件夹内的页面,那如何判断是否登录呢?background是关键目录,每个操作该目录的人都需要写在日志表中,如何实现呢?拦截器是实现方案之一。

(1) 在com.geloin.spring.interceptor包中添加SystemInterceptor,并使其继承HandlerInterceptor

  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-3-27 下午2:29:35 
  5.  */  
  6. package com.geloin.spring.interceptor;  
  7.   
  8. import java.io.PrintWriter;  
  9. import java.util.Iterator;  
  10. import java.util.Map;  
  11.   
  12. import javax.annotation.Resource;  
  13. import javax.servlet.http.HttpServletRequest;  
  14. import javax.servlet.http.HttpServletResponse;  
  15.   
  16. import org.springframework.stereotype.Repository;  
  17. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;  
  18.   
  19. import com.embest.ruisystem.form.SystemLoggerForm;  
  20. import com.embest.ruisystem.form.SystemUserForm;  
  21. import com.embest.ruisystem.service.SystemLoggerService;  
  22. import com.embest.ruisystem.util.Constants;  
  23. import com.embest.ruisystem.util.DataUtil;  
  24.   
  25. /** 
  26.  *  
  27.  * @author geloin 
  28.  * @date 2012-3-27 下午2:29:35 
  29.  */  
  30. @Repository  
  31. public class SystemInterceptor extends HandlerInterceptorAdapter {  
  32.   
  33.     @Resource(name = "systemLoggerService")  
  34.     private SystemLoggerService systemLoggerService;  
  35.   
  36.     /* 
  37.      * (non-Javadoc) 
  38.      *  
  39.      * @see 
  40.      * org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle 
  41.      * (javax.servlet.http.HttpServletRequest, 
  42.      * javax.servlet.http.HttpServletResponse, java.lang.Object) 
  43.      */  
  44.     @SuppressWarnings({ "rawtypes""unchecked" })  
  45.     @Override  
  46.     public boolean preHandle(HttpServletRequest request,  
  47.             HttpServletResponse response, Object handler) throws Exception {  
  48.   
  49.         request.setCharacterEncoding("UTF-8");  
  50.         response.setCharacterEncoding("UTF-8");  
  51.         response.setContentType("text/html;charset=UTF-8");  
  52.   
  53.         // 后台session控制   
  54.         String[] noFilters = new String[] { "login.html""veriCode.html",  
  55.                 "index.html""logout.html" };  
  56.         String uri = request.getRequestURI();  
  57.   
  58.         if (uri.indexOf("background") != -1) {  
  59.             boolean beFilter = true;  
  60.             for (String s : noFilters) {  
  61.                 if (uri.indexOf(s) != -1) {  
  62.                     beFilter = false;  
  63.                     break;  
  64.                 }  
  65.             }  
  66.             if (beFilter) {  
  67.                 Object obj = request.getSession().getAttribute(  
  68.                         Constants.LOGINED);  
  69.                 if (null == obj) {  
  70.   
  71.                     // 未登录   
  72.                     PrintWriter out = response.getWriter();  
  73.                     StringBuilder builder = new StringBuilder();  
  74.                     builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");  
  75.                     builder.append("alert(\"页面过期,请重新登录\");");  
  76.                     builder.append("window.top.location.href=\"");  
  77.                     builder.append(Constants.basePath);  
  78.                     builder.append("/background/index.html\";</script>");  
  79.                     out.print(builder.toString());  
  80.                     out.close();  
  81.                     return false;  
  82.                 } else {  
  83.                     // 添加日志   
  84.                     String operateContent = Constants.operateContent(uri);  
  85.                     if (null != operateContent) {  
  86.                         String url = uri.substring(uri.indexOf("background"));  
  87.                         String ip = request.getRemoteAddr();  
  88.                         Integer userId = ((SystemUserForm) obj).getId();  
  89.                         SystemLoggerForm form = new SystemLoggerForm();  
  90.                         form.setUserId(userId);  
  91.                         form.setIp(ip);  
  92.                         form.setOperateContent(operateContent);  
  93.                         form.setUrl(url);  
  94.                         this.systemLoggerService.edit(form);  
  95.                     }  
  96.                 }  
  97.             }  
  98.         }  
  99.   
  100.         Map paramsMap = request.getParameterMap();  
  101.   
  102.         for (Iterator<Map.Entry> it = paramsMap.entrySet().iterator(); it  
  103.                 .hasNext();) {  
  104.             Map.Entry entry = it.next();  
  105.             Object[] values = (Object[]) entry.getValue();  
  106.             for (Object obj : values) {  
  107.                 if (!DataUtil.isValueSuccessed(obj)) {  
  108.                     throw new RuntimeException("有非法字符:" + obj);  
  109.                 }  
  110.             }  
  111.         }  
  112.   
  113.         return super.preHandle(request, response, handler);  
  114.     }  
  115.   
  116. }  
        (2) 修改context-dispatcher.xml,让spring管理拦截器
  1. <mvc:interceptors>  
  2.     <bean class="com.geloin.spring.interceptor.SystemInterceptor" />  
  3. </mvc:interceptors>  

(1) 导入包,包结构如下图所示:


        (2) 配置web.xml,如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  5.     id="WebApp_ID" version="2.5">  
  6.     <display-name>spring_test</display-name>  
  7.   
  8.     <!-- 配置文件位置,默认为/WEB-INF/applicationContext.xml -->  
  9.     <context-param>  
  10.         <param-name>contextConfigLocation</param-name>  
  11.         <param-value>classpath:applicationContext.xml</param-value>  
  12.     </context-param>  
  13.   
  14.     <!-- 字符集过滤器 -->  
  15.     <filter>  
  16.         <filter-name>characterEncodingFilter</filter-name>  
  17.         <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  
  18.         <init-param>  
  19.             <param-name>encoding</param-name>  
  20.             <param-value>UTF-8</param-value>  
  21.         </init-param>  
  22.     </filter>  
  23.     <filter-mapping>  
  24.         <filter-name>characterEncodingFilter</filter-name>  
  25.         <url-pattern>/*</url-pattern>  
  26.     </filter-mapping>  
  27.       
  28.     <!-- 上下文Spring监听器 -->  
  29.     <listener>  
  30.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  31.     </listener>  
  32.       
  33.     <!-- servlet控制跳转 -->  
  34.     <servlet>  
  35.         <servlet-name>spring</servlet-name>  
  36.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  37.         <!-- 配置文件 -->  
  38.         <init-param>  
  39.             <param-name>contextConfigLocation</param-name>  
  40.             <param-value>classpath:context-dispatcher.xml</param-value>  
  41.         </init-param>  
  42.     </servlet>  
  43.     <servlet-mapping>  
  44.         <servlet-name>spring</servlet-name>  
  45.         <url-pattern>*.html</url-pattern>  
  46.     </servlet-mapping>  
  47.   
  48.     <welcome-file-list>  
  49.         <welcome-file>index.html</welcome-file>  
  50.         <welcome-file>index.htm</welcome-file>  
  51.         <welcome-file>index.jsp</welcome-file>  
  52.         <welcome-file>default.html</welcome-file>  
  53.         <welcome-file>default.htm</welcome-file>  
  54.         <welcome-file>default.jsp</welcome-file>  
  55.     </welcome-file-list>  
  56. </web-app>  
        (3) 配置dispatcher文件src/context-dispatcher.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans default-lazy-init="true"  
  3.     xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xmlns:mvc="http://www.springframework.org/schema/mvc"  
  6.     xsi:schemaLocation="  
  7.        http://www.springframework.org/schema/beans    
  8.        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  9.        http://www.springframework.org/schema/mvc    
  10.        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd    
  11.        http://www.springframework.org/schema/context   
  12.        http://www.springframework.org/schema/context/spring-context-3.0.xsd">   
  13.   
  14.     <!-- 使用注解的包,包括子集 -->  
  15.     <context:component-scan base-package="com.geloin.spring" />  
  16.     <!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->  
  17.     <mvc:annotation-driven />  
  18.     <!-- 视图解析器 -->  
  19.     <bean id="viewResolver"  
  20.         class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
  21.         <property name="viewClass"  
  22.             value="org.springframework.web.servlet.view.JstlView" />  
  23.         <property name="prefix" value="/WEB-INF/pages/" />  
  24.         <property name="suffix" value=".jsp"></property>  
  25.     </bean>  
  26. </beans>  

     (4) 配置src/applicationContext.xml
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xmlns:context="http://www.springframework.org/schema/context"  
  5.     xsi:schemaLocation="  
  6.     http://www.springframework.org/schema/beans    
  7.     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
  8.     http://www.springframework.org/schema/context    
  9.     http://www.springframework.org/schema/context/spring-context-3.0.xsd">   
  10.       
  11. </beans>  
        (5) 在src下添加包com.geloin.spring(与context-dispatcher.xml一致),其下添加controller子包,在com.geloin.spring.controller下添加一个controller,如下所示:
  1. /** 
  2.  * 
  3.  * @author geloin 
  4.  * @date 2012-5-5 上午9:31:52 
  5.  */  
  6. package com.geloin.spring.controller;  
  7.   
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import org.springframework.stereotype.Controller;  
  11. import org.springframework.web.bind.annotation.RequestMapping;  
  12.   
  13. /** 
  14.  *  
  15.  * @author geloin 
  16.  * @date 2012-5-5 上午9:31:52 
  17.  */  
  18. @Controller  
  19. @RequestMapping(value = "background")  
  20. public class LoginController {  
  21.   
  22.     /** 
  23.      *  
  24.      *  
  25.      * @author geloin 
  26.      * @date 2012-5-5 上午9:33:22 
  27.      * @return 
  28.      */  
  29.     @RequestMapping(value = "to_login")  
  30.     public void toLogin(HttpServletResponse response) throws Exception {  
  31.         response.getWriter().print(" this is to logging 1");  
  32.     }  
  33. }  

        (6) 启动服务,在浏览器中输入http://localhost:8080/spring_test/background/to_login.html(http://localhost:8080/spring_test为项目路径,background与LoginController上的@RequestMapping值一致,to_login与toLogin方法上的@RequestMapping值一致,.html为web.xml中DispatcherServlet的url-mapping值),显示结果如下图所示:

结果


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值