Apache Shiro会话超时,登录页面跳转到父窗体的解决方法
来源:互联网 发布:linux 文件系统初始化 编辑:程序博客网 时间:2024/06/04 19:29
问题1:
在使用Apache Shiro框架做权限验证时,因为我的页面是使用iframe做了一个上左右的分层,上面上log,左侧是菜单,具体的内容则显示在右侧。
当我点击某菜单,此时如果会话超时了,则登录页面只会显示到右侧区域,看起来不是很友好,所以需要登录页面显示到整个浏览器。
解决方法:
在登录页面做一个跳转,当登录页面不是在顶层显示,则跳转:
window.onload = function () { if (window.parent.window != window) { window.top.location = "/login-main.action"; }}
问题2:
因为Shiro会记录上一次造成会话超时的页面,登录成功后,会直接跳转到这个页面,而我这里是层级显示,所以,如果使用Shiro的跳转,则跳转的页面,将没有log和菜单栏了
解决方法:
1、重写登录的过滤器,将Shiro记录的页面清除并保存到自己定义的session中,完成跳转。
2、在首页,将自定义保存的请求取出跳转。
过滤器:
package cn.zfcr.shiro.filter;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import org.apache.commons.lang3.StringUtils;import org.apache.shiro.authc.AuthenticationException;import org.apache.shiro.authc.AuthenticationToken;import org.apache.shiro.authc.IncorrectCredentialsException;import org.apache.shiro.authc.UnknownAccountException;import org.apache.shiro.session.Session;import org.apache.shiro.subject.Subject;import org.apache.shiro.web.util.SavedRequest;import org.apache.shiro.web.util.WebUtils;import org.springframework.stereotype.Service;/** 文件名:FormAuthenticationFilter.java 类说明: Shiro 表单验证过滤器扩展 写入登录验证失败的错误提示 作者:章锋 邮箱: zhangfeng2124@163.com 日期:2017年6月22日 下午2:29:54 描述:例:章锋-认证 版本:1.0*/@Servicepublic class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.FormAuthenticationFilter { public static final String DEFAULT_MESSAGE_PARAM = "message"; /** 自定义保存到session中的请求数据的key 用于页面跳转 */ public static final String CUSTOM_SAVED_REQUEST = "customSavedRequest"; private String messageParam = DEFAULT_MESSAGE_PARAM; @Override protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception { SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request); Session session = subject.getSession(); session.setAttribute(CUSTOM_SAVED_REQUEST, savedRequest); return super.onLoginSuccess(token, subject, request, response); }/** * 登录失败调用事件 */@Overrideprotected boolean onLoginFailure(AuthenticationToken token,AuthenticationException e, ServletRequest request, ServletResponse response) {String className = e.getClass().getName(), message = "";if (IncorrectCredentialsException.class.getName().equals(className)|| UnknownAccountException.class.getName().equals(className)){message = "用户名或密码错误, 请重试.";}else if (e.getMessage() != null && StringUtils.startsWith(e.getMessage(), "msg:")){message = StringUtils.replace(e.getMessage(), "msg:", "");}else{message = "系统异常,请稍后再试!";e.printStackTrace();} request.setAttribute(getFailureKeyAttribute(), className); request.setAttribute(getMessageParam(), message); return true;}public String getMessageParam() { return messageParam; }}
首页跳转代码:
<s:if test="#session.customSavedRequest != null"> <script type="text/javascript"> var url = '${session.customSavedRequest.requestURI}?${session.customSavedRequest.queryString}'; $("#mainFrame").attr("src", url); </script></s:if>
ok。
阅读全文
0 0
- Apache Shiro会话超时,登录页面跳转到父窗体的解决方法
- shiro权限控制,会话超时跳转登录页面只有iframe跳转,父页面没有跳转
- 我的shiro之旅: 十五 shiro 登录成功后,跳转到登录前的页面
- 页面超时跳转到登录页面被框架页面嵌套的问题
- Ajax请求,登录超时,如何跳转到登录页面
- Shiro中session超时页面跳转的处理
- shiro不能跳转到登录前请求页面
- spring security 处理session 超时跳转到登录页面
- Filter配置会话超时跳转页面
- 实现登录时间过期后,下次登录时跳转到上次会话最后一次访问的页面
- shiro 登录成功后 不跳转到 successUrl 的问题解决
- 登录跳转到自己想要的页面
- shiro登录成功后指定跳转页面
- login 跳转 到 tabbar 页面(登录界面的跳转)
- shiro用authc配置后登录成功后不能跳转到index页面
- jquery ajax方法调用在session超时以后如何跳转到登录页面?
- jquery ajax方法调用在session超时以后如何跳转到登录页面?
- 利用Spring自定义AOP进行Session超时自动跳转到登录页面
- 页面js定义一定要用var而非let
- MVC5 razor视图通过JavaScript读取Controller中的集合类
- Qt Events 示例代码
- jQuery中的end()
- HDU1176:免费馅饼(DP) (G)
- Apache Shiro会话超时,登录页面跳转到父窗体的解决方法
- [leetcode]49. Group Anagrams
- 一张表读懂ON(安森美)
- iOS开发自动检测内存泄漏神器MLeaksFinder
- was集群架构设计
- SpringBoot启动过程
- 网络请求篇--RXJava+okhttp 进行网络下载操作
- u3d
- Linux I/O重定向