Spring boot Spring引导中使用筛选器的会话超时
我正试图在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
<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秒之前过期之前提供警告或弹出窗口。