Spring MVC,拦截器实现session控制

来源:互联网 发布:数据分析包括哪些方面 编辑:程序博客网 时间:2024/05/22 16:05

本文基于Spring MVC 注解,让Spring跑起来。
未登录,不允许访问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> 

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2012-05/61505.htm

原创粉丝点击