千家信息网

怎么解决shiro会话超时302问题

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇内容介绍了"怎么解决shiro会话超时302问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!产
千家信息网最后更新 2025年01月23日怎么解决shiro会话超时302问题

本篇内容介绍了"怎么解决shiro会话超时302问题"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

产生异常的情况:nginx配置了https,但是nginx转发请求到web应用走的http,会话超时,shiro会重定向到登录页,这时重定向的是http地址,比如http://xxxxx/login/index ,浏览器会阻止这样的请求(从https页面发起http请求是非法的)。

  1. 重写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;}
  1. ajax全局设置

$.ajaxSetup({    complete: function (xhr, status) {            if (xhr.getResponseHeader('REQUIRE_AUTH') == 'true') {                    alert("未登录或登录超时!");                    window.top.location.href = getHost() + '/login/index';                    return;            }        }});
  1. /login/index页面处理

"怎么解决shiro会话超时302问题"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

登录 浏览器 浏览 问题 全局 内容 地址 情况 更多 知识 页面 处理 配置 实用 学有所成 接下来 困境 实际 文章 有用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 共享单车系统数据库 网络安全远程攻击视频 亚马逊云服务器免费申请 浦口镇数据库培训多少钱 怀旧服不同服务器的对战 mcu软件开发做什么工作 辐射4登录无服务器 网络安全知识竞赛服务器失误 金融系统 网络安全法 应用软件开发案例官方最新版 大唐数据网络技术有限公司 数据库持续集成 win服务器直连存储步骤 软件开发的质量管理包括哪些内容 网络安全漏洞管理的建议 数据库在哪添加字段 腾讯云服务器 手机管理 数据中台和分布式数据库 将乐法院开展网络安全宣传活动 杭州编程软件开发公司 镇魔曲找不到服务器 网络安全工作思考和建议 北京新东方学校软件开发 软件开发周期与过程 金山区运营软件开发口碑推荐 PGDD数据库使用说明 服务器管理用什么软件下载 华为2488v5是什么服务器 信息技术行业数据库 杭州易涞手网络技术有限公司
0