最近公司内部框架中对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.<a target=_blank href="http://biancheng.dnbcw.info/jsp/" style="margin: 0px; padding: 0px; text-decoration: none; color: rgb(0, 0, 0); border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(51, 51, 51); ">jsp</a>";}if (null == session) {top.location = "transfer.jsp";}

在blank.jsp中引入一个中转页transfer.jsp。这个页面用于进行post跳转,再次去请求login.do。

top.location为指定在主页面展示,而不是在内嵌的页面展示。

4)第四步则需要进行二次login.do的请求,代码如下:

<script type="text/<a target=_blank href="http://biancheng.dnbcw.info/java/" style="margin: 0px; padding: 0px; text-decoration: none; color: rgb(0, 0, 0); border-bottom-width: 1px; border-bottom-style: dotted; border-bottom-color: rgb(51, 51, 51); ">java</a>script">
$(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超时配置流程相关推荐

  1. java spring mvc 上传_Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) 下载文件代码 @RequestMapping("/file/{name.rp}") public Respo ...

  2. Spring MVC Interceptor Handler InterceptorAdapter HandlerInterceptor示例

    Spring MVC Interceptor HandlerInterceptorAdapter,HandlerInterceptor示例 Spring Interceptor用于拦截客户端请求并处理 ...

  3. Spring MVC处理用户请求的完整流程

    Spring MVC 框架是高度可配置的,包含多种视图技术,例如 JSP 技术.Velocity.Tiles.iText 和 POI. Spring MVC 框架并不关心使用的视图技术,也不会强迫开发 ...

  4. 番外:Spring MVC环境搭建和Mybatis配置避坑篇

    2019独角兽企业重金招聘Python工程师标准>>> web.xml引入对spring mvc的支持: spring-mvc配置spring-mvc: spring-mybatis ...

  5. Spring、Spring MVC、MyBatis整合文件配置详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. web.xml的配置 web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经 ...

  6. spring mvc静态资源访问的配置

    如果我们使用spring mvc来做web访问请求的控制转发,那么默认所有访问都将被DispatcherServlet独裁统治.比如我现在想访问的欢迎页index.html根本无需任何业务逻辑处理,仅 ...

  7. 在基于Spring MVC的应用程序中配置favicon.ico

    Favicon是与您的网站相关的图标(favicon.ico). 并非每个网站都在使用favicon. 但是大多数浏览器并不关心它,反正他们都要求它. 当图标图标不在适当位置时,服务器将返回不必要的4 ...

  8. Spring MVC控制器的单元测试:配置

    传统上,为Spring MVC控制器编写单元测试既简单又成问题. 尽管编写调用控制器方法的单元测试非常简单,但问题是这些单元测试不够全面. 例如,我们不能仅通过调用已测试的控制器方法来测试控制器映射, ...

  9. 将社交登录添加到Spring MVC Web应用程序:配置

    过去,用户使用用户名和密码组合登录. 尽管如今有些人仍然偏爱传统方式,但越来越多的用户希望使用其社交媒体帐户登录. 这就是使Spring Social(及其子项目)成为Spring项目组合有用的补充的 ...

最新文章

  1. 微信小游戏视频激励广告onClose接口叠加回调的问题解决方法
  2. java延迟函数_Java 8:延迟计算
  3. python对英语的要求_学python需要英语基础吗
  4. windows清理剪切板
  5. 静态内部类----Java
  6. 在C#中实现托盘是多么简单
  7. 程序员相比于黑客(Hacker),差距有多远?看看程序员怎么说!
  8. Spring Boot 前端传json数组,后台接收处理
  9. mpvue 小程序 页面unLoad后数据没清空
  10. PHP购物网站(含购物车、全部源码、数据库设计表及其源码)
  11. 当case when then else end 语句遇上sum或count等统计函数
  12. docker离线安装与卸载
  13. 【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
  14. java在浏览器闪退_浏览器连续闪退,作者来看看错误日志
  15. 当我们浏览器访问某个网站时,中间经历了什么,如何到达对方的?
  16. 郑州国防学校计算机网络技术,郑州国防科技学校2021年招生计划
  17. python罗马数字转换_Python练习【3】【罗马数字转换/查找公共前缀】
  18. 到底什么样的 REST 才是最佳 REST?
  19. Active Map v2000 1CD
  20. 快速上手JDBC——Java如何在底层操作数据库

热门文章

  1. 中国人工智能学会通讯——深度学习与推荐系统 1.2 基于特征的推荐 (Feature-based Recommendation)...
  2. Python模拟入栈出栈操作
  3. 修改linux系统时间的方法(date命令)
  4. iOS开发进阶教程【第一季小试牛刀】
  5. ZOJ 1013 Great Equipment(DP)
  6. 为nopcommerce自定义用户积分功能(1)
  7. 注意!恶意NPM包正在安装勒索软件和密码窃取木马
  8. 接管任意微软账户并获$5万赏金的故事
  9. 出于安全考虑,谷歌禁用三款 Linux web 浏览器登录其服务
  10. 运维利器screen