springMVC 拦截器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 SystemInterceptorextends 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.                     returnfalse;
  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.  
(2) 修改context-dispatcher.xml,让spring管理拦截器

  1. <mvc:interceptors> 
  2.     <bean class="com.geloin.spring.interceptor.SystemInterceptor" />
  3. </mvc:interceptors> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值