Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot Spring引导中使用筛选器的会话超时_Spring Boot_Session_Iframe_Filter_Session Timeout - Fatal编程技术网

Spring boot Spring引导中使用筛选器的会话超时

Spring boot Spring引导中使用筛选器的会话超时,spring-boot,session,iframe,filter,session-timeout,Spring Boot,Session,Iframe,Filter,Session Timeout,我正试图在Spring引导项目中使用筛选器实现会话超时逻辑 筛选器拦截每个请求并检查会话是否为新会话 如果会话超时,它应该重定向到登录页面 因为有一个iFrame,所以重定向发生在iFrame内部。如何将主页重定向到登录页面 代码如下: <body> <a class="nav-link dropdown-toggle menu-submenu" role="butto

我正试图在Spring引导项目中使用筛选器实现会话超时逻辑

  • 筛选器拦截每个请求并检查会话是否为新会话
  • 如果会话超时,它应该重定向到登录页面
  • 因为有一个iFrame,所以重定向发生在iFrame内部。如何将主页重定向到登录页面
  • 代码如下:

            <body>
            <a
                class="nav-link dropdown-toggle menu-submenu"
                role="button"
                data-toggle="collapse"
                aria-haspopup="true"
                aria-expanded="false"
                target="basefrm"
                th:attr="href='#'+${submenu.shortCode}, title=${submenu.title}">
    
            <iframe
                class="embed-responsive-item justify-content justify-content-center "
                height="100%"
                width="100%"
                id="basefrm"
                name="basefrm"
                scrolling="overflow-x:no ;overflow-y:no"
                frameborder="0"
                allowTransparency="false"
                style="height: 100%;"></iframe>
        </body>
    
    @WebFilter("/*")
    @Order(1)
    public class TransactionFilter extends HttpFilter {
        
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;   
            HttpSession session = req.getSession(false);
            
            if(session !=null && !session.isNew() && session.getAttribute("login") != null) {
                if(req.getRequestURI().equalsIgnoreCase(req.getContextPath()+"/")) {
                    res.sendRedirect(req.getContextPath()+"/loginpage.html");
                }
                else {
                    chain.doFilter(request, response);              
                }
            }
            else {
                logger.debug("session timed out!");
                session = req.getSession(true);
                session.setAttribute("login", true);
                
                logger.debug("path:{}"+req.getContextPath());
                res.sendRedirect(req.getContextPath()+"/loginpage.html");
            }
        }
    
    }
    
    
    @WebFilter(“/*”)
    @订单(1)
    公共类TransactionFilter扩展了HttpFilter{
    @凌驾
    public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain链)
    抛出IOException、ServletException{
    HttpServletRequest req=(HttpServletRequest)请求;
    HttpServletResponse res=(HttpServletResponse)响应;
    HttpSession session=req.getSession(false);
    if(session!=null&&!session.isNew()&&session.getAttribute(“登录”)!=null){
    if(req.getRequestURI().equalsIgnoreCase(req.getContextPath()+“/”)){
    res.sendRedirect(req.getContextPath()+“/loginpage.html”);
    }
    否则{
    链式过滤器(请求、响应);
    }
    }
    否则{
    debug(“会话超时!”);
    session=req.getSession(true);
    session.setAttribute(“login”,true);
    debug(“路径:{}”+req.getContextPath());
    res.sendRedirect(req.getContextPath()+“/loginpage.html”);
    }
    }
    }
    
    您找到解决方案了吗?找到了。我使用javascript将用户重新路由到登录页面,以防会话过期。请共享解决方案。每次用户按键或移动鼠标时,您都会重置javascript计时器。当Javascript计时器超过会话超时限制时,应将用户重定向到主页,要求其再次登录。或者,您甚至可以在会话到期前30-60秒前提供警告或弹出窗口。您找到解决方案了吗?找到了。我使用javascript将用户重新路由到登录页面,以防会话过期。请共享解决方案。每次用户按键或移动鼠标时,您都会重置javascript计时器。当Javascript计时器超过会话超时限制时,应将用户重定向到主页,要求其再次登录。或者,您甚至可以在会话在30-60秒之前过期之前提供警告或弹出窗口。