`
123003473
  • 浏览: 1040768 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Spring MVC,拦截器实现session控制

 
阅读更多
本文基于Spring MVC 注解,让Spring跑起来。
        未登录,不允许访问background文件夹内的页面,那如何判断是否登录呢?background是关键目录,每个操作该目录的人都需要写在日志表中,如何实现呢?拦截器是实现方案之一。
        (1) 在com.geloin.spring.interceptor包中添加SystemInterceptor,并使其继承HandlerInterceptor

/** 
 * 
 * @author geloin 
 * @date 2012-3-27 下午2:29:35 
 */  
package com.geloin.spring.interceptor;  
  
import java.io.PrintWriter;  
import java.util.Iterator;  
import java.util.Map;  
  
import javax.annotation.Resource;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import org.springframework.stereotype.Repository;  
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;  
  
import com.embest.ruisystem.form.SystemLoggerForm;  
import com.embest.ruisystem.form.SystemUserForm;  
import com.embest.ruisystem.service.SystemLoggerService;  
import com.embest.ruisystem.util.Constants;  
import com.embest.ruisystem.util.DataUtil;  
  
/** 
 *  
 * @author geloin 
 * @date 2012-3-27 下午2:29:35 
 */  
@Repository  
public class SystemInterceptor extends HandlerInterceptorAdapter {  
  
    @Resource(name = "systemLoggerService")  
    private SystemLoggerService systemLoggerService;  
  
    /* 
     * (non-Javadoc) 
     *  
     * @see 
     * org.springframework.web.servlet.handler.HandlerInterceptorAdapter#preHandle 
     * (javax.servlet.http.HttpServletRequest, 
     * javax.servlet.http.HttpServletResponse, java.lang.Object) 
     */  
    @SuppressWarnings({ "rawtypes", "unchecked" })  
    @Override  
    public boolean preHandle(HttpServletRequest request,  
            HttpServletResponse response, Object handler) throws Exception {  
  
        request.setCharacterEncoding("UTF-8");  
        response.setCharacterEncoding("UTF-8");  
        response.setContentType("text/html;charset=UTF-8");  
  
        // 后台session控制  
        String[] noFilters = new String[] { "login.html", "veriCode.html",  
                "index.html", "logout.html" };  
        String uri = request.getRequestURI();  
  
        if (uri.indexOf("background") != -1) {  
            boolean beFilter = true;  
            for (String s : noFilters) {  
                if (uri.indexOf(s) != -1) {  
                    beFilter = false;  
                    break;  
                }  
            }  
            if (beFilter) {  
                Object obj = request.getSession().getAttribute(  
                        Constants.LOGINED);  
                if (null == obj) {  
  
                    // 未登录  
                    PrintWriter out = response.getWriter();  
                    StringBuilder builder = new StringBuilder();  
                    builder.append("<script type=\"text/javascript\" charset=\"UTF-8\">");  
                    builder.append("alert(\"页面过期,请重新登录\");");  
                    builder.append("window.top.location.href=\"");  
                    builder.append(Constants.basePath);  
                    builder.append("/background/index.html\";</script>");  
                    out.print(builder.toString());  
                    out.close();  
                    return false;  
                } else {  
                    // 添加日志  
                    String operateContent = Constants.operateContent(uri);  
                    if (null != operateContent) {  
                        String url = uri.substring(uri.indexOf("background"));  
                        String ip = request.getRemoteAddr();  
                        Integer userId = ((SystemUserForm) obj).getId();  
                        SystemLoggerForm form = new SystemLoggerForm();  
                        form.setUserId(userId);  
                        form.setIp(ip);  
                        form.setOperateContent(operateContent);  
                        form.setUrl(url);  
                        this.systemLoggerService.edit(form);  
                    }  
                }  
            }  
        }  
  
        Map paramsMap = request.getParameterMap();  
  
        for (Iterator<Map.Entry> it = paramsMap.entrySet().iterator(); it  
                .hasNext();) {  
            Map.Entry entry = it.next();  
            Object[] values = (Object[]) entry.getValue();  
            for (Object obj : values) {  
                if (!DataUtil.isValueSuccessed(obj)) {  
                    throw new RuntimeException("有非法字符:" + obj);  
                }  
            }  
        }  
  
        return super.preHandle(request, response, handler);  
    }  
  
} 

(2) 修改context-dispatcher.xml,让spring管理拦截器
<mvc:interceptors>  
    <bean class="com.geloin.spring.interceptor.SystemInterceptor" />  
</mvc:interceptors>   


【转载地址】
http://blog.csdn.net/geloin/article/details/7537070
分享到:
评论

相关推荐

    详解Spring MVC拦截器实现session控制

    主要介绍了详解Spring MVC拦截器实现session控制,使用session监听,重复登录后,强制之前登录的session过期。有兴趣的可以了解一下。

    Spring MVC 3 结合DWZ 框架编写拦截器判断session是否过期

    基于注解的Spring MVC 3 结合DWZ 框架,编写的拦截器判断session是否过期,有需要的可以下载。

    拦截器和控制器的区别

    2、拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器 3、拦截器在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调一次。 4、拦截器可以利用依赖注入,因此在spring框架程序中,...

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    使用SessionListener+持久化Session+Springmvc拦截器实现单点登录

    SpringMVC拦截器实现监听session是否过期详解

    主要介绍了SpringMVC拦截器实现监听session是否过期详解,还是比较不错的,这里分享给大家,供需要的朋友参考。

    springboot学习思维笔记.xmind

    拦截器配置 @ControllerAdivce @ExceptionHandler @InitBinder @ModelAttribute 其他配置 ViewController 路径匹配参数配置 WebMvcConfigurerAdapter WebMvcConfigurer ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.5.3.1. RedirectView 13.5.3.2. redirect:前缀 13.5.3.3. forward:...

    spring security 参考手册中文版

    25.1 AOP联盟(MethodInvocation)安全拦截器 197 25.1.1显式MethodSecurityInterceptor配置 197 25.2 AspectJ(JoinPoint)安全拦截器 198 26.基于表达式的访问控制 200 26.1概述 200 26.1.1通用内置表达式 201 ...

    Spring中文帮助文档

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. ...

    Spring API

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器(ViewResolver) 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. ...

    Spring 2.0 开发参考手册

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2....

    spring-boot示例项目

    web|[ssh项目,spring mvc,过滤器,拦截器,监视器,thymeleaf,lombok,jquery,bootstrap,mysql](https://github.com/smltq/spring-boot-demo/blob/master/web/HELP.md) aop|[aop,正则,前置通知,后置通知,环绕通知]...

    把session信息放到redis中

    通过过滤器拦截request请求,将session中的信息保存至redis中,用于负载均衡的web项目,此资源只包括只包括核心的实现,根据需要嵌入到各种项目中,我之前项目用的是spring mvc。

    spring chm文档

    13.4.3. 拦截器(HandlerInterceptor) 13.5. 视图与视图解析 13.5.1. 视图解析器 13.5.2. 视图解析链 13.5.3. 重定向(Rediret)到另一个视图 13.6. 本地化解析器 13.6.1. AcceptHeaderLocaleResolver 13.6.2....

    Java SSM开发大众点评后端

    3Spring定时器、拦截器的应用 4跟踪Spring源码,追踪解决问题 前后端分离开发 手把手演示如何串联React技术栈App和管理后台 让后台Form表单提交符合RESTful规范 比较SPA和传统后台两种会话方式:Token和Session ...

    Spring面试题

    ☆ Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。 Spring 框架的...

    springmybatis

    mybatis实战教程mybatis in action之六与Spring MVC 的集成 mybatis实战教程mybatis in action之七实现mybatis分页源码下载 mybatis实战教程mybatis in action之八mybatis 动态sql语句 mybatis实战教程mybatis in ...

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    Java Web程序设计教程

    6.1.2拦截器及拦截器栈的应用 111 6.1.3自定义拦截器 115 6.2类型转换器 117 6.2.1struts2内置类型转换器 117 6.2.2引用类型的转换方式 117 6.2.3特殊对象的类型转换 118 6.2.4类型转换的错误处理 121 6.3...

    SpringMVC面试专题.pdf

    1、什么是 SpringMvc? 2、Spring MVC 的优点: 3、SpringMVC 工作原理? 4、SpringMVC 流程? 6、SpringMvc 的控制器是不是单例模式,如果是,有...22、SpringMvc 里面拦截器是怎么写的 23、讲下 SpringMvc 的执行流程

Global site tag (gtag.js) - Google Analytics