`

拦截器实现对用户是否登录及登陆超时的验证

 
阅读更多

本文以spring为例,其他的框架原理相同,请自己查找

Spring3中通过mvc:interceptors标签配置拦截器

这个标签用于注册一个自定义拦截器或者是WebRequestInterceptors.

可以通过定义URL来进行路径请求拦截,可以做到较为细粒度的拦截控制。

例如在配置文件加入

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

<!-- 以下配置将拦截所有的URL请求 -->

<mvc:interceptors>

<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" />

</mvc:interceptors>

<!-- 以下配置将拦截特有的URL请求 -->

<mvc:interceptors>

<mvc:interceptor>

<mvc:mapping path="/secure/*"/>

<bean class="org.example.SecurityInterceptor" />

</mvc:interceptor>

<mvc:interceptor>

<mvc:mapping path="/admin/*.do"/>

<bean class="org.example.admin.ControlInterceptor" />

</mvc:interceptor>

</mvc:interceptors>

</beans>

定义的拦截器只需要实现

@Override

public boolean preHandle(HttpServletRequest req,HttpServletResponse res, Object handler)

 

举一个实际的例子进行说明:

 

1、spring-mvc.xml配置文件中

<!-- 用户登录校验 -->
    <mvc:interceptors>
        <bean class="com.shxt.framework.utils.LoggedInterceptor"></bean>
    </mvc:interceptors>

 

2、对应的拦截器类:

@Repository
public class LoggedInterceptor extends HandlerInterceptorAdapter {
   
    /**
     * action之前执行
     */
    @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", "handle" };    //url中如果有login和handle不拦截
        String uri = request.getRequestURI();
 
        if (uri.indexOf("common") != -1) { 
            boolean beFilter = true; 
            for (String s : noFilters) { 
                if (uri.indexOf(s) != -1) { 
                    beFilter = false; 
                    break; 
                }
            } 
            if (beFilter) { 
                Object obj = request.getSession().getAttribute(SystemConstants.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(SystemConstants.BASEPATH);  //这里是http://ip:port/项目名
                    builder.append("/common/user/login\";</script>");  //这里是重新登录的页面url
                    out.print(builder.toString()); 
                    out.close(); 
                    return false; 
                }
            } 
        } 
        return super.preHandle(request, response, handler); 
    } 
     
    /**
     * 生成视图之前执行
     */
    @Override 
    public void postHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler, 
            ModelAndView modelAndView) throws Exception { 
    } 
     
    /**
     * 最后执行,可用于释放资源
     */
    @Override 
    public void afterCompletion(HttpServletRequest request, 
            HttpServletResponse response, Object handler, Exception ex) 
            throws Exception { 
    } 
}

 

3、配置session的有效期

在web.xml中添加

<session-config>
  <session-timeout>30</session-timeout>
 </session-config>

在30分钟之内session有效,在测试的时候可以讲其改为1,一分钟之后再访问,就会弹出提示“重新登录”的窗口

0
0
分享到:
评论

相关推荐

    session超时拦截器

    页面session页面点击会报错,我可以配置拦截器进行拦截操作判断session是否过期。

    Java整理的基础工具类项目

    接口访问超时拦截器 二叉树模糊匹配数字 插座连接池封装 guava本地同步更新 Redis实现Ip、手机号等访问次数限制时,支持按照时间段(天、时、分、秒),支持按期限(每个期限) LocaleDate 日期处理工具类

    TCP拦截和网络地址转换

    T C P拦截通过对其进行拦截和验证来阻止这种攻击。 这个特征可以在两种模式上工作:拦截和监视。在拦截模式下(.. intercept mode),路由器拦截 所有到达的.. T C P同步请求,并代表服务器建立与客户机的连接,并...

    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 ...

    nestjs-core:NestJS项目的核心组件

    [ ]全局超时拦截器,用于取消任何正在运行的请求。 [ ]全局验证管道和序列化器,用于验证修饰的DTO并自动引发错误的请求。 [ ]支持自定义配置类。 [ ]秘密变量验证。 [ ]创建具有可重复使用的url,标头或主体的基本...

    Spring Security 中文教程.pdf

    14.1. AOP联盟 (MethodInvocation) 安全拦截器 14.1.1. 精确的 MethodSecurityIterceptor 配置 14.2. AspectJ (JoinPoint) 安全拦截器 15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 ...

    DRouter:Android路由器框架

    简介 DRouter是滴滴乘客端自研的一套Android路由框架,基于平台化解耦的思想,为...注入拦截器,支持全局拦截器和局部拦截器,面向切面编程 更为多样化的Fragment页面跳转能力 使用接口或基类导航到实现类Service的Cl

    SpringSecurity 3.0.1.RELEASE.CHM

    14.1. AOP联盟 (MethodInvocation) 安全拦截器 14.1.1. 精确的 MethodSecurityIterceptor 配置 14.2. AspectJ (JoinPoint) 安全拦截器 15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 15.2. Web...

    Spring Security-3.0.1中文官方文档(翻译版)

    14.1. AOP 联盟(MethodInvocation) 安全拦截器 14.1.1. 精确的MethodSecurityIterceptor 配置 14.2. AspectJ (JoinPoint) 安全拦截器 15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 15.2...

    EasyGo:基于Kotlin、OkHttp的声明式网络框架,像写HTML界面一样写网络调用代码

    6、支持配置全局的拦截器,也可以为每个请求单独设置拦截器,对请求进行拦截配置; 7、框架进行了分层设计,请求数据装载层、网络请求层、数据解析层完全解耦分离; 8、网络请求层设计了统一的接口,目前已内置...

    springboot-ng:springboot+angular -- 17年5月停更

    3.拦截器和过滤器 4.log4j 5.junit 6.token权限验证 7.session超时处理和httpsession监听器 8.bootstarp-Admin框架 9.记录登录者信息,存储在mongodb中.(使用到百度地图api中的IP精确定位) 已包含工具类: 1.ID生成器...

    shawn-common-utils:Java整理的基础工具类项目

    接口访问超时拦截器 二叉树模糊匹配数字 Socket连接池封装 guava本地缓存异步更新 Redis实现Ip、手机号等访问次数限时,支持按照时间段(天、时、分、秒),支持按时间内(每一时间内) LocaleDate 日期处理工具类

    springCloud

    微服务架构引入策略 – 对传统企业而言,开始时可以考虑引入部分合适的微服务架构原则对已有系统进行改造或新建微服务应用,逐步探索及积累微服务架构经验,而非全盘实施微服务架构。 更多关于微服务架构内容-请...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    8.8 拦截器 332 8.9 依赖注入 335 8.9.1 EJB注入 336 8.9.2 资源注入 339 8.10 配置EJB引用 340 8.11 使用计时器进行任务调度 342 8.12 本章小结 345 第9章 消息驱动EJB 346 9.1 JMS和EJB 347 9.1.1 为什么使用MDB ...

    【分布式事务----LCN】LCN原理及使用方式.docx

    LCN模式是通过代理Connection的方式实现对本地事务的操作,然后在由TxManager统一协调控制事务。当本地事务提交回滚或者关闭连接时将会执行假操作,该代理的连接将由LCN连接池管理。 该模式的特点: - 该模式对代码...

    QSHttp:Android安卓httphttps一句代码联网络框架net framework

    AIP精简到极致,调用没有一行多余代码,几乎零成本使用,大道至简5年实战环境验证迭代,稳定可靠强大灵活的入参,支持泛型回调,使用简单可简单实现自动弹加载框,判断业务状态码,弹错误提示支持多拦截器,可全局配置一些...

    网络安全复习重点.doc

    状态检测防火墙对每个合法网络连接保存的信息进行检查,包括 源地址、目的地址、协议类型、协议相关信息(如TCP/UDP协议的端口、ICMP协议的 ID号)、连接状态(如TCP连接状态)和超时时间等,防火墙把这些信息叫做状态...

Global site tag (gtag.js) - Google Analytics