怎么解决shiro会话超时302问题
发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,本篇内容介绍了"怎么解决shiro会话超时302问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!产
千家信息网最后更新 2024年09月25日怎么解决shiro会话超时302问题
本篇内容介绍了"怎么解决shiro会话超时302问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
产生异常的情况:nginx配置了https,但是nginx转发请求到web应用走的http,会话超时,shiro会重定向到登录页,这时重定向的是http地址,比如http://xxxxx/login/index ,浏览器会阻止这样的请求(从https页面发起http请求是非法的)。
重写shiro的FormAuthenticationFilter
public class MyShiroAuthcFilter extends FormAuthenticationFilter { public MyShiroAuthcFilter(String loginUrl) { super(); setLoginUrl(loginUrl); } @Override protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { if (isLoginRequest(request, response)) { return super.onAccessDenied(request, response); } else { if (isAjax((HttpServletRequest) request)) { // 处理ajax请求 HttpServletResponse httpServletResponse = WebUtils.toHttp(response); httpServletResponse.addHeader("REQUIRE_AUTH", "true"); // ajax全局设置中有用 httpServletResponse.setStatus(HttpStatus.UNAUTHORIZED.value()); // 改变302状态码 } else { saveRequest(request); request.getRequestDispatcher(getLoginUrl()).forward(request, response); // 由于是nginx转发的,_redirect 302会重定向到http协议,不是浏览器期望的https // saveRequestAndRedirectToLogin(request, response); } return false; } } private boolean isAjax(HttpServletRequest request) { String requestedWithHeader = request.getHeader("X-Requested-With"); return "XMLHttpRequest".equals(requestedWithHeader); }}
shiro的filter配置
@Beanpublic ShiroFilterFactoryBean shiroFilter(SecurityManager securityManager) { String loginUrl = "/login/index"; ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); Mapfilters = shiroFilter.getFilters(); filters.put("anon", new AnonymousFilter()); filters.put("authc", new MyShiroAuthcFilter(loginUrl)); Map filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/supervisor/**", "authc"); filterChainDefinitionMap.put("/**", "anon"); shiroFilter.setSecurityManager(securityManager); shiroFilter.setLoginUrl(loginUrl); shiroFilter.setUnauthorizedUrl("/login/unauthorized"); shiroFilter.setFilters(filters); shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap); return shiroFilter;}
ajax全局设置
$.ajaxSetup({ complete: function (xhr, status) { if (xhr.getResponseHeader('REQUIRE_AUTH') == 'true') { alert("未登录或登录超时!"); window.top.location.href = getHost() + '/login/index'; return; } }});
/login/index页面处理
"怎么解决shiro会话超时302问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
登录
浏览器
浏览
问题
全局
内容
地址
情况
更多
知识
页面
处理
配置
实用
学有所成
接下来
困境
实际
文章
有用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全培训后能干什么
绩溪常规软件开发服务哪个好
企业网网络安全构建实训心得
网络安全发展方向
计算机数据库种类
富士通r服务器管理口地址
网络安全意识教育视频课程
pubmed数据库下载
海淀区实用软件开发报价
dtu数据软件开发
中国电信 服务器托管
梅州市网络安全行业
数据库系统中模式的概念
一线人员网络安全规定20条
上海师翊网络技术
区县网络安全形势分析
如何像网页提交数据库
昌平区软件开发
洛阳软件开发公司
mac 电脑做服务器
主域名和子域名绑定不同服务器
数据库技术解析
福建飞讯网络技术
亚马逊服务器 ss
mysql数据库搬家
HP Dl2000服务器
网络安全密钥是什么在哪
南京千人千面网络技术有限公司
浩盛网络技术有限公司地址
服务器故障后显示器灯不亮