shiro登陆超时的问题

项目中登陆用到了shiro验证框架,session超时,shiro默认会迁移到登陆画面。现在想session超时想弹出一个对话框,不知该如何解决。




<bean id="dmpSessionListener" class="com.pactera.platform.reqm.web.util.DmpSessionListener"/> 

public class DmpSessionListener implements SessionListener{

@Override
public void onStart(Session session) {
    // TODO Auto-generated method stub
    System.out.println("onStart");

}

@Override
public void onStop(Session session) {
    // TODO Auto-generated method stub
    System.out.println("onStop");       
}

@Override
public void onExpiration(Session session) {
    // TODO

}

}
查了一下,有个监听session超时的方法,可是监听到应该怎样弹对话框呢,前台开发不熟悉。请大家赐教。

0
shyboy0358
shyboy0358 谢谢,明白了,但是前台有好多页面,想写个共同的js,不知怎么写ajax全局事件,请教一下 if(XMLHttpRequest.status=401){ alert("系统超时,请重新登录"); window.close(); window.location.href="/user/login.do"; return; }
大约 5 年之前 回复
iteye_18867
iteye_18867 if(AjaxUtils.isAjaxRequest(WebUtils.toHttp(request))){ HttpServletResponse res = WebUtils.toHttp(response); res.sendError(HttpServletResponse.SC_UNAUTHORIZED); }的判断是必须的,因为服务端无法对ajax请求重定向,必须返回一个状态码由客户端的ajax全局事件主动处理状态码,如果你不判断,那么你会发现ajax请求你得不到想要的结果(不会提示!)
大约 5 年之前 回复

3个回答

这里不是使用监听 思路都一样,简单说下:
如果你使用的是FormAuthenticationFilter,那么继承FormAuthenticationFilter覆盖onAccessDenied方法,方法实现:
[code="java"] if (isLoginRequest(request, response)) {
if (isLoginSubmission(request, response)) {
return executeLogin(request, response);
} else {
return true;
}
} else {
if(AjaxUtils.isAjaxRequest(WebUtils.toHttp(request))){
HttpServletResponse res = WebUtils.toHttp(response);
res.sendError(HttpServletResponse.SC_UNAUTHORIZED);

            }else{
                redirectToLogin(request, response);
            }

// saveRequestAndRedirectToLogin(request, response);
return false;
}[/code]
然后前台设置ajax全局状态码处理 捕获401,给出提示或做进一步处理
资源权限和角色权限同样可以使用这种方式!我想我说的够清楚了!

0
shyboy0358
shyboy0358 很好用,谢谢,不过没用 if(AjaxUtils.isAjaxRequest(WebUtils.toHttp(request))){ HttpServletResponse res = WebUtils.toHttp(response); res.sendError(HttpServletResponse.SC_UNAUTHORIZED); }else{ redirectToLogin(request, response); } 为什么要单独判断ajax的请求?
大约 5 年之前 回复
iteye_18867
iteye_18867 saveRequestAndRedirectToLogin(request, response);这句是注释掉了 代码中漏掉了一个/
大约 5 年之前 回复

在页面上记录一个时间, 然后用javascript去判断, 如果session失效时间快到了, 用户还没和server交互过,那就弹出一个对话框.
[code="java"]


<br> var sessionTime=5;<br> var intvalue=1;<br> function start(){<br> intvalue ++;<br> document.getElementById(&quot;demo&quot;).innerHTML=&quot;&nbsp;&quot; + Math.floor(((sessionTime-intvalue)/60)).toString()+&quot;分&quot;+((sessionTime-intvalue)%60).toString()+&quot;秒&quot;;<br> if(intvalue&gt;=sessionTime){<br> end();<br> }<br> }<br> function end(){<br> alert(&quot;时间到了!!&quot;);<br> window.location.href=&quot;<a href="http://www.baidu.com">http://www.baidu.com</a>&quot;;<br> }</p> <pre><code>window.setInterval(&quot;start()&quot;,1000); </code></pre> <p>[/code]
0
De_Moivre
De_Moivre 你的项目难道没有一个公用的js文件,写在那里不就可以了,每个文件都引用一下就可以了。 但是需要改进的是,你先打开了一个页面,过了2分钟有打开了一个页面,那计时应该从第二个页面打开时算起,这样可以在后台使用一个全局变量,每次用户和后台有交互,就重置这个值,然后开始计时,在前台使用ajax返回这个值做判断,这个应该可以实现
大约 5 年之前 回复
shyboy0358
shyboy0358 有好多页面,这样改动太大了,我想实现一个共同的方法,在每一个页面超时都能弹出对话框。
大约 5 年之前 回复

首先,完全没有必要给这个提示,你想想,如果用户打开了10个页面,session过期了,
10个窗口都会弹出这个,用户要关闭弹出框10次,体验度太差了。我是到现在都没见过有网站会这样弄的。
你顶多在页面跳转到登录之前给他个超时的提示。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
解决shiro登陆超时ajax请求报解析错误
普通请求在shrio登陆超时的时候正常跳转登录页面。正常的ajax请求返回json字符串,而登陆超时的时候shiro过滤返回的是登陆页面,页面是jsp的,不是json的,所以会报解析错误。parsererror :解析错误error :请求失败解决:JQuery设置全局 AJAX 默认选项$.ajaxSetup({ complete:function(XMLHttpRequest,text...
Iframe框架session超时嵌套显示登录页面
在登录页面添加以下代码,前台使用Jquery框架。 &amp;lt;script type=&quot;text/javascript&quot;&amp;gt; $(function() { if (window != top) { top.location.href = location.href; } }); &amp;lt;/script&amp;gt;   ...
Shiro 处理ajax请求 拦截登录超时---解决!
配置全局ajax配置 $.ajaxSetup({       complete:function(XMLHttpRequest,textStatus){             if(textStatus=="parsererror"){                  $.messager.alert('提示信息', "登陆超时!请重新登陆!", 'info',func
shiro登录超时后发起ajax异步请求,跳到登录界面
1:创建过滤器ShiroPermissionsFilter import org.apache.commons.lang.StringUtils; import org.apache.shiro.web.servlet.AdviceFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.se...
springboot shiro iframe中请求Session失效后iframe内跳转到登录页解决方案后续
在解决方案一中解决了iframe session超时跳转到登录页问题,但是第二个问题来了,超时登陆后,出现直接跳转到了iframe的内容页,翻看了shiro官方文档,意思是shiro默认记住了超时登录之前的url放到了shiro自己的session内,当重新登录后,会获取session中的url,然后跳转过去,解决每次超时都跳转到首页的问题。 但是咱们的问题是他每次超时跳转都直接跳转到了if...
Shiro 处理ajax请求 拦截登录超时 解决!
配置全局ajax配置$.ajaxSetup({ complete:function(XMLHttpRequest,textStatus){ if(textStatus=="parsererror"){ $.messager.alert('提示信息', "登陆超时!请重新登陆!", 'info',function(){
shiro+layui登录超时后发起ajax异步请求,跳到登录界面
一、后端配置: 1、创建LoginFilter.java(过滤器主程序) 注意:有用Shiro权限框架的继承AdviceFilter类,重写preHandle()方法,没有的请直接实现Filter接口,重写doFilter()方法 package com.seesun2012.web.mall.filter; import javax.servlet.ServletRequest; import...
Spring boot + thymeleaf + Shiro 会话过期返回登录界面片段之解决方案
解决方案的主导思想是:检测当会话过期时,判断是否为ajax请求,若是ajax请求,则将该url请求结果的状态置为401,并且不保存此次访问请求的url,当前端检测到访问结果为401时,跳转至登录界面,用户可顺利进行账户密码的输入并完成登录。 在此主导思想下将会遇到以下几个问题: 1.前端ajax请求完成后的统一处理问题; 2.后端会话过期的检测问题; 3.对封装后的ajax进行请求完成后的统一处理问题; 4.对临时添加的界面元素执行ajax请求的统一处理问题; 5.在spring boot框架下对shiro
设置shiro超时时间
1:在shiro配置xml中定义bean &amp;lt;bean id=&quot;sessionManager&quot; class=&quot;org.apache.shiro.web.session.mgt.DefaultWebSessionManager&quot;&amp;gt; &amp;lt;property name=&quot;globalSessionTimeout&quot; value=&quot;3000&quot; &amp;gt;&amp;lt;/property&am
Shiro 设置session超时时间
系统默认超时时间是180000毫秒(30分钟),可以通过下面2中方式设置自定义的超时时间。 一: 配置文件 二:通过api Shiro的Session接口有一个setTimeout()方法,登录后,可以用如下方式取得session SecurityUtils.getSubject().get
easyui shiro session超时跳转至登录页
 问题描述:java web项目中使用shiro做安全框架,前端使用easyui;在session过期时shiro配置了自动跳转至登录页面url,由于使用了easyui在前端做数据的展示、表单的提交等操作,于是出现session过期时使用easyui访问某个操作不会跳转至登录页面。easyui操作代码如下:   $(&quot;#formxx&quot;).form(&quot;submit&quot;, { url : ...
Apache Shiro会话超时,登录页面跳转到父窗体的解决方法
问题1: 在使用Apache Shiro框架做权限验证时,因为我的页面是使用iframe做了一个上左右的分层,上面上log,左侧是菜单,具体的内容则显示在右侧。 当我点击某菜单,此时如果会话超时了,则登录页面只会显示到右侧区域,看起来不是很友好,所以需要登录页面显示到整个浏览器。 解决方法: 在登录页面做一个跳转,当登录页面不是在顶层显示,则跳转: window.onload =
解决shiro在没有注销的情况下重新登陆的问题
在使用shiro的时候遇到一个比较操蛋的问题,就是用户登陆之后一直后退,会后退到登陆界面,如果用户这个时候再输入用户名和密码进行登陆的时候shiro就会报一个错误。 具体原因是再执行登陆的时候会调用org.apache.shiro.web.filter.AccessControlFilter类里面的onPreHandle方法。 [img]http://dl2.iteye.com/upl...
springBoot+shiro,session失效跳转登录页面.zip
springBoot+shiro idea开发,在session失效时间跳转到登录页面
关于shiro中 ajax请求登录失效的处理
在公司项目中,与后台数据交互都是采用ajax请求进行数据交互。遇到当服务端会话失效后,页面无法跳转到登录页面。参考网上帮助处理如下。 1.自定义拦截器 public class UserFormAuthenticationFilter extends FormAuthenticationFilter { private static final Logger log = Logge
Shiro中session超时页面跳转的处理
shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时。本文从这连个方面分别考虑并处理。
springboot shiro iframe中请求Session失效后iframe内跳转到登录页解决方案
问题描述: session超时后,iframe嵌套的页面子页面直接跳转到了登录页,如下图: 这种情况是我们不想要的,解决办法是在登录页判断是否在iframe里,如果在,直接刷新父页面到登录页。 所以在login.jsp中加入如下代码: 找到boot启动类, 将session超时时间更改为一分钟: 登录页面,等待一分钟显示结果: 其实还有其他办法就是在shiro...
关于shiro刷新最后一次请求时间来控制session超时
现在我的心情是激动的,昨天还以为必须要改源码才能解决自己的这个需求,没想到今天来了又继续疏理shiro关于session的刷新和shiro框架的实现,总感觉继承shiro中的类可以实现这个问题,但是具体怎么实现还是一头雾水,但是最终还是解决了,来,现在再疏理一下关于session的刷新。 1、session的创建在用户登录的时候查创建成功,然后可以通过 SessionDao 这个类获取到关于se...
Session过期,如何跳出iframe框架页的问题 shiro session过期跳转页面
  在首页加上这段js   &amp;lt;script type=&quot;text/javascript&quot;&amp;gt; if(window !=top){ top.location.href=location.href; } &amp;lt;/script&amp;gt;
Shiro中Session过期页面跳转回登录页面处理问题
Session超时的两种情况: shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时; 解决问题的思路:通过定义过滤器来检查是否Session过期问题,当前是否session超时,超时判定是否是ajax请求,如果是ajax请求,则在response头部设置session-status值,返回到前端读取
iframe session 失效 跳转至登陆页面
 在跳转的login.jsp页面增加如下代码: if (window != top) top.location.href = location.href;  
Session超时 Ajax请求页面的跳转
      当session超时时,如果不是ajax请求,很简单就能实现跳到指定的页面;但是ajax请求就会有问题:如果是ajax类型的弹出框则会在弹出框中显示跳转的指定页面,如果是正常ajax请求,则可能会显示源代码等。         我们需要做的是通过一个过滤器,判断是否是超时的ajax的请求进行一些特殊的处理。   package org.zhuc.common.filter; ...
shiro在remember me状态下session失效解决办法
使用shiro的时候,当我们使用remember me功能登录系统的时候,我们在用户登录自定义的session已经失效,这样就会影响系统正常运行;对于这种情况,我的解决方案是在shiro中自定义一个filter检测自定义的session是否失效,如果失效就读取数据加入到session中shiro 配置文件: <!-- 自定义加入filter,起在remember me session失效情况下刷新s
【Java】SpringMVC项目利用Shiro设置固定时间内密码登录重试次数限制
1.pom配置:&amp;lt;!-- shiro --&amp;gt; &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;commons-logging&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;commons-logging&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;1.1.3&amp;lt;/ver
Shiro中设置session超时时间
一、通过配置文件方式进行设置 &amp;lt;!-- 会话管理器 --&amp;gt; &amp;lt;bean id=&quot;sessionManager&quot; class=&quot;org.apache.shiro.web.session.mgt.DefaultWebSessionManager&quot;&amp;gt; &amp;lt;!-- 设置超时时间--单位:ms --&amp;gt; &amp;lt;property...
shiro +springmvc+freemarker session问题处理 shiro无法记录登陆前页面问题
调试shiro 处理登陆后页面跳转问题时,页面总是无法跳转到之前访问的页面去,查看配置,没有问题。 经查看 登陆前已经保存了请求,但是登陆后取确为空,经查看登陆前后的sessionid 不一致。 shiro 配置如下: 这一问题有待解决 于是乎 想换个 web应用的session处理 org.apache.shiro.web.session.mgt.Defau
已经解决shiro登录 ajax交互
shiro ajax 删除 没有权限 不跳转页面 或者没有反应
Ext6.x+springmvc+shiro框架下实现session过期跳转到登录页面
1. 在web.xml中添加拦截器,对所有的*.do请求进行过滤 登录过滤器 -->  filter>       filter-name>sessionTimeOutFilterfilter-name>  filter-class>com.psdb.core.base.filter. SessionTimeOutFilterfilter-class> filter> filter
shiro多账户重复登录的问题探究
最近研究shiro时,想探讨一下,多账户登录时,会不会顶下之前已经登录的账户,于是进行了以下测试: 分析可能出现的结果: 之后登录的账户会顶下之前登录的账户 两次登录的账户会并存 考虑到浏览器不同会对结果产生干扰的问题,做了以下的测试步骤:----不同浏览器1.admin通过火狐浏览器登录成功,并且页面展示表明已经验证2.admin通过IE浏览器再次登录,页面展示已经通过验证此时,刷新火狐...
对于登陆长时间未操作超时退出问题
首先设置一个拦截器: import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.S
shiro 拦截器实现session过期拦截ajax请求的处理
拦截器代码:package com.xlqh.outlook.shirofilter; import java.io.IOException; import org.apache.shiro.web.filter.PathMatchingFilter; import com.xlqh.outlook.MyShiroConstants.MyShiroConstants; import com.xlqh
shiro ajax登录过期处理
shiro ajax登录过期处理1、创建拦截器2、Shiro配置类里增加如下代码3、ajax方法 1、创建拦截器 【跳转的路径】不能是login,否则会导致重定向次数过多 import com.alibaba.fastjson.JSONObject; import org.apache.shiro.web.filter.authc.FormAuthenticationFilter; import...
关于shiro同一帐号同一时刻多处登录问题
这段时间做项目遇到一个关于shiro登录的问题。同一帐号不能同时登录,如果同时登录的话前面一个人的session就失效。百转千回,因为shiro登录到权限控制没有任何问题,就把问题点转移到存储端。去检查redis,检查reids的配置相关,结果也没发现什么毛病。后来在网上查阅文章,多看了看shiro相关的东西。问题锁定在shiro控制同一用户不能在同一时刻多处登录,然后修改程序: 1.s
shiro登录,多个项目session被覆盖问题
有两个项目都使用了shiro权限校验框架,且部署在一台服务器下两个Tomcat中。 测试时发现在一个浏览器中,登录A后,再登录B。这时A失效,需要重新登录,且登录后B又失效。查看log后发现是cookieId相同的原因。先排查tomcat。 在tomcat下的server.xml中添加sessionCookieName,A项目设置为A_SESSION,B项目设置为B_SESSION。测试后发现问
Filter配置会话超时跳转页面
前言 上篇博客针对EasyUI+SpringMvc配置session过期跳转页面做了介绍,但是在运用过程中会出现在IE8中有时候不能正常使用的情况,也会出现和导入的操作冲突问题,经过一系列的探索发现这种方法针对不同浏览器尤其是IE会出现瑕疵,而且很难找到问题的所在,所以就又通过filter机制来完善了一下此功能。 具体filter的机制的就不再过多介绍,咱们直接进入主题,来看看怎么进行配置完
一个用户在同一个浏览器多次登录shiro互踢的问题
关键代码如下: //判断是否同一个用户再同一个浏览器中登录,是就不踢除 protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { //获取基于用户名和密码的令牌 //实际上这个...
shiro会话监听器
会话监听器用于监听会话创建、过期及停止事件: public class MySessionListener implements SessionListener { @Override public void onStart(Session session) {//会话创建时触发 System.out.println("会话创建:" + session.getId
shiro登陆注销权限控制
将focus.sql在Mysql数据库执行,后再项目yml文件中修改数据库配置即可直接启动项目。登陆账户名称和密码直接在数据库查看
springboot shiro整合多次登录问题
参考网上整合springboot+shiro示例做了一个demo发现点击登录事件2次才能进入首页,跟踪发现调用shiro.logout方法跳到登录页面后,点击第一次登录直接进去了拦截顺丰一定写成,要授权的地址写在前面。如果写反了,可能遗忘了有些地址也是不需要授权的...
shiro 框架之认证登录
自己对认证登录的理解:  简单的说,shiro登录流程就是程序获取到token(即用户输入的账号密码)和shiro中的realm(一般自定义realm从数据库获取到的info)进行匹配。 如果账号匹配不上则报(AuthenticationException) 如果密码匹配不上则报(IncorrectCredentialsException) 其实IncorrectCredentialsE...