怎么解决shiro会话超时302问题
发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,本篇内容介绍了"怎么解决shiro会话超时302问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!产
千家信息网最后更新 2025年12月01日怎么解决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(); Map filters = 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安全错误
数据库的锁怎样保障安全
手机运行程序中的服务器错误
如何查邮箱的服务器地址
数据库性能 文本
常州app软件开发中心
outlook查看服务器
apt网络安全产品
系统数据库管理
400后端服务器访问无法访问
停车场智能软件开发方案
儿童网络安全教育日
深圳分仓软件开发
嘉定区常规软件开发参考价格
福州大学万德数据库
bookshop数据库创建命令
软件开发中se的职位描述
软件安装时数据库连接失败
完美世界怎么退出服务器
北京邮电网络技术研究院
手机网络安全管控意见建议
大连睿创网络技术有限公司
游戏服务器到期了会怎么样
订餐软件开发背景
网络安全制约互联网发展
海南新概念互联网科技有限公司
西湖租房软件开发
来宾有哪些互联网科技公司
人工智能网络技术的基础知识
数据库不能启动3414
怎么画网络安全的画图片
冯提莫网络安全宣传