`
123003473
  • 浏览: 1068126 次
  • 性别: 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的创建和销毁,如何实现用户的重复登录控制以及如何在拦截器中处理未登录用户的访问权限问题,...

    spring mvc 拦截器获取请求数据信息.rar

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前或之后执行特定的逻辑。它们可以用来实现权限检查、日志记录、性能统计等多种功能。本压缩包“spring mvc 拦截器获取请求...

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

    总结一下,本篇文章介绍了如何在Spring MVC 3中结合DWZ前端框架实现一个拦截器,用于检测session是否过期。通过拦截器,我们能够在每次请求前检查session状态,及时通知用户重新登录,从而提高了系统的安全性。同时...

    spring boot 拦截器拦截/Filter 过滤session案例

    在本文中,我们将深入探讨如何在...拦截器和过滤器的选择取决于具体需求,拦截器更适合Spring MVC的控制流,而过滤器则适用于更底层的HTTP请求处理。后续使用token认证的方式将进一步提升系统的可扩展性和安全性。

    java之spring mvc之拦截器.docx

    在Spring MVC框架中,拦截器(Interceptor)是一个强大的工具,用于在请求被控制器处理之前、之后以及视图渲染之后执行一些额外的操作。拦截器通过实现`HandlerInterceptor`接口或者继承`HandlerInterceptorAdapter`...

    基于springMVC的session拦截器

    - 如果需要共享拦截器逻辑,可以考虑使用Spring的`@Component`和`@Order`注解,结合`@EnableWebMvc`和`WebMvcConfigurerAdapter`来实现组件化和定制化的拦截器管理。 7. **总结** SpringMVC的Session拦截器是提高...

    浅析java中 Spring MVC 拦截器作用及其实现

    这篇文章将深入探讨Spring MVC拦截器的作用、实现方式以及其在实际应用中的使用场景,并对比拦截器与过滤器的区别。 首先,让我们来看看如何实现一个Spring MVC拦截器: 1. **编写拦截器类**:你需要创建一个类并...

    spring boot 登录拦截器

    Spring Boot结合了Spring MVC框架,提供了方便的方式来实现这样的拦截器。本篇文章将深入探讨如何使用Spring Boot、JPA连接数据库以及设置登录拦截器来拦截指定路径。 首先,我们需要理解Spring Boot中的JPA(Java ...

    自己spring boot 拦截器

    在Spring Boot应用中,拦截器(Interceptor)是Spring MVC框架的一部分,用于在请求处理之前、之后或在实际处理过程中执行一些预定义的任务。这通常包括权限检查、日志记录、性能监控等。自定义拦截器可以帮助我们更...

    spring mvc框架实现添加功能Demo

    Spring MVC的核心组件包括DispatcherServlet、Controllers、Models、Views以及各种拦截器和转换器。 **添加功能实现步骤** 1. **配置Spring MVC** - 首先,你需要在`web.xml`中配置DispatcherServlet,这是Spring ...

    springmvc(spring4版本)+自带登录和拦截器

    本项目是一个基于Spring 4的Spring MVC实现,内含登录功能和拦截器,可以直接运行,为开发者提供了一个快速开发的基础模板。 首先,让我们详细了解一下Spring MVC的核心概念: 1. **DispatcherServlet**:它是...

    spring 国际化 spring mvc

    Spring MVC 国际化实现详解 在 Spring MVC 框架中,实现国际化是一项非常重要的任务。国际化可以让我们的应用程序适应不同语言和地区,提高应用程序的可读性和可用性。本文将详细介绍如何使用 Spring MVC 实现国际...

    Spring Controller拦截器配置

    本文将详细介绍如何在Spring MVC中配置一个简单的拦截器来实现用户Session的存在性检查,以及当Session不存在时,自动跳转到登录页面。 #### 二、XML配置详解 拦截器可以通过XML文件进行配置。下面的示例展示了...

    SpringMVCHibernate实例【含登录拦截器例子】

    登录拦截器在 Spring MVC 中是实现权限控制的一种方式。通常,拦截器会在控制器方法执行前进行拦截,检查请求上下文中的某些信息,如 Session 中的用户信息。如果用户未登录或权限不足,拦截器会阻止请求继续执行,...

    SpringMVC配置拦截器实现登录控制的方法

    4. SpringMVC中的拦截器实现登录控制的流程:首先配置拦截器,指定需要拦截的URL路径和排除的URL路径(如登录页面和静态资源路径等)。拦截器的实现类中,preHandle方法中首先检查请求的URI是否在排除的URL列表中,...

    Java SpringBoot实现的过滤器(和拦截器)控制登录页面跳转

    本项目主要关注的是如何使用过滤器(Filter)和拦截器(Interceptor)来实现登录页面的控制与跳转。以下是对这些知识点的详细说明: 1. **SpringBoot**: SpringBoot是Spring框架的一个子项目,旨在简化Spring应用...

    Spring MVC Locale 的使用 中文 英文 等语言 切换

    此外,如果需要在全局范围内改变应用的`Locale`,可以创建一个自定义的`HandlerInterceptor`,在拦截器中处理`Locale`的切换逻辑。这样,当用户请求特定的URL时,系统会自动更新`Locale`,并重定向到原来的请求URL,...

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

    在Java Web开发中,特别是使用SpringMVC框架时,管理...总之,通过SpringMVC拦截器来实现对session是否过期的监听,是一个既灵活又强大的解决方案,对于需要精细控制Web应用会话的开发者来说,是一个必不可少的技术点。

    Spring MVC注解项目实例

    总结起来,这个"Spring MVC注解项目实例"涵盖了Spring MVC框架的核心元素,包括注解驱动的控制器、拦截器的使用,以及数据库操作。它为初学者提供了一个动手实践的机会,帮助他们快速掌握Spring MVC的开发技巧。

    spring mvc项目后端源码

    9. **拦截器**:`HandlerInterceptor` 接口可以用来实现请求的预处理和后处理,例如登录检查、性能监控等。 10. **验证**:Spring MVC 结合 `Hibernate Validator` 提供了表单验证功能,可以使用 `@Valid` 和 `...

Global site tag (gtag.js) - Google Analytics