Spring mvc Interceptor 解决Session超时配置流程
最近公司内部框架中对Session超时这一功能未实现,由于采用iframe结构,Session超时后,当点击左侧系统菜单时,会在iframe的右侧再次弹出登陆框。
该问题是由于没有设置拦截器造成。
添加拦截器思路:当Session超时后,用户点击menu时,需要用Interceptor进行前项拦截,并判断此时session中是否还存在用户信息,如果不存在,将其指定登陆主页面。
如下代码:
1)首先在applicationContext-mvc.xml中加入mvc:interceptor标签。
<!-- session timeout interceptor -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*/*" />
<bean class="com.lenovo.lstp.mam.interceptor.SessionTimeoutInterceptor" >
<property name="allowUrls">
<list>
<value>/login/login.do</value>
<value>/common/language.do</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors> <!-- exception handler -->
<bean id="handlerExceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
<property name="exceptionMappings">
<props>
<prop key="com.lenovo.lstp.mam.exception.SessionTimeoutException">/blank</prop>
</props>
</property>
</bean>
上述代码中首先要在系统内部包中创建一个名为SessionTimeoutInterceptor的拦截器,并指定允许的访问的url为list中集合。
当用户从此地址登陆后,无需进行拦截。
SessionTimeoutException中为当拦截生效后,会throw出该异常。
并进入blank.jsp页面。
2)第二步则要进行拦截器SessionTimeoutInterceptor创建,代码如下:
/**
* Session超时,拦截访问
*
*/
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String requestUrl = request.getRequestURI(); for(String url : allowUrls) {
if(requestUrl.endsWith(url)) {
return true;
}
} String session = (String) WebUtils.getSessionAttribute(request,
"username");
if(session != null) {
return true;
}else {
throw new SessionTimeoutException();
} }
除了被允许的Url,其他任何Url,只要没有检查到Session的存在,则会抛出SessionTimeoutException,用于去指向登陆页面,SessionTimeoutException中则无需写入任何操作。
3)由于iframe布局会造成登陆框内嵌问题,因此可以通过以下方式实现,代码如下:
var session = "${user}";
if("" == session){
top.location = "transfer.jsp";
}
if (null == session) {
top.location = "transfer.jsp";
}
在blank.jsp中引入一个中转页transfer.jsp。这个页面用于进行post跳转,再次去请求login.do。
top.location为指定在主页面展示,而不是在内嵌的页面展示。
4)第四步则需要进行二次login.do的请求,代码如下:
<script type="text/javascript">
$(document).ready(function(){
document.transfer.submit();
});
</script> <body>
<form name="transfer" action="login/login.do" method="post"></form> </body>
当进入该页面,会自动提交login.do请求,但是之前由于页面允许了login.do的进入,该操作可以在loginControll中进行判断。
代码如下:
/* After session timeout, check dto's username, and return login.jsp. */
if(dto.getUsername() == null) {
ModelAndView mv = new ModelAndView("login");
return mv;
}
在login方法中引入该判断 ,对二次访问该Controll的信息进行判断,如果用户名没有的话,则自动跳回login.jsp页面重新输入。
此时,已大功告成,如果登陆页面有其他链接,可以在allowurl去进行配置。
Spring mvc Interceptor 解决Session超时配置流程的更多相关文章
- 2017.3.31 spring mvc教程(二)核心流程及配置详解
学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变 ...
- 转载 Spring、Spring MVC、MyBatis整合文件配置详解
Spring.Spring MVC.MyBatis整合文件配置详解 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了.先总结一下SSM整合的文件配置.其实具体的用法最好还是看官方文档. ...
- 惊呆了,Servlet Filter和Spring MVC Interceptor的实现居然这么简单
前言 创建型:单例模式,工厂模式,建造者模式,原型模式 结构型:桥接模式,代理模式,装饰器模式,适配器模式,门面模式,组合模式,享元模式 行为型:观察者模式,模板模式,策略模式,责任链模式,状态模式, ...
- Spring MVC 中获取session的几种方法
Spring MVC 中使用session是一种常见的操作,但是大家上网搜索一下可以看到获取session的方式方法五花八门,最近,自己终结了一下,将获取session的方法记录下来,以便大家共同学习 ...
- Spring MVC、MyBatis整合文件配置详解
Spring:http://spring.io/docs MyBatis:http://mybatis.github.io/mybatis-3/ Building a RESTful Web Serv ...
- Spring mvc interceptor配置拦截器,没有登录跳到登录页
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- [转]Spring mvc interceptor配置拦截器,没有登录跳到登录页
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.s ...
- Spring、Spring MVC、MyBatis整合文件配置详解
原文 http://www.cnblogs.com/wxisme/p/4924561.html 主题 MVC模式MyBatisSpring MVC 使用SSM框架做了几个小项目了,感觉还不错是时候总 ...
- 【转】Spring、Spring MVC、MyBatis整合文件配置详解
见:http://www.tuicool.com/articles/eyINveF web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式 ...
随机推荐
- hdu 4778
知道是状态压缩,但是不会做: 看题解学的: dp[i]表示现在状态是i,先手-后手的分数. #include<cstdio> #include<cstring> #includ ...
- DHTMLX 前端框架 建立你的一个应用程序 教程(六)-- 表格加载数据
从数据库加载数据 这篇我们介绍从MySQL数据库中加载数据到表格 我们使用 MySql的数据库dhtmlx_tutorial 和表contacts 示例使用的是PHP平台和dhtmlxConnecto ...
- M-JPEG和MPEG-4的区别 M-JPEG VS MPEG
http://blog.sina.com.cn/s/blog_4b357b300100gre9.html M-JPEG VS MPEG http://blog.csdn.net/bluesky_sun ...
- RxJava开发精要6 – Observables组合
原文出自<RxJava Essentials> 原文作者 : Ivan Morgillo 译文出自 : 开发技术前线 www.devtf.cn 转载声明: 本译文已授权开发者头条享有独家转 ...
- xcode5编译过的xib 如何在xcode4.6下打开
IOS7一出来,对应的xcode版本变成了5了,这次xcode升级比较大,特别是在源代码编译方面,苹果下足了功夫,编译时间不到原来的一半,忽然强烈觉得android在这方面需要加强啊: 其他不多说,X ...
- 【HDOJ】2037 今年暑假不AC
qsort排序后DP,水题.注意,数组开大点儿,把时间理解为0~23,开太小会wa. #include <stdio.h> #include <stdlib.h> #defin ...
- 个人比较喜欢的Sublime Text主题
Monokai Bright Pastels on Dark Sunburst Twilight Flatland Dark Flatland Monokai
- 基于Hadoop Sequencefile的小文件解决方案
一.概述 小文件是指文件size小于HDFS上block大小的文件.这样的文件会给hadoop的扩展性和性能带来严重问题.首先,在HDFS中,任何block,文件或者目录在内存中均以对象的形式存储,每 ...
- Bootstrap中的less基础
在线编译 因为 less 的语法毕竟相对简单,所以一些在线工具可以很轻松的做到.比如 http://less.cnodejs.net http://www.ostools.net/less 一般都有 ...
- 【转】ubuntu 11.10(32位系统)下编译android源码
原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...