栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

N分钟后绝对会话到期,即使用户正在使用系统

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

N分钟后绝对会话到期,即使用户正在使用系统

[编辑:在特定时间由登录时间决定终止会话的想法是使用任务调度程序(如Quartz)来调度通过会话作为参数传递的任务。然后,您可以计划它以调用

session.invalidate()
在特定时间点执行的作业。该任务将在登录时安排。]

这就是我要做的,但是并不会在您想要的特定时间终止会话。它依赖于用户发出请求。这不是万无一失的方法,但是您可以让应用程序每分钟左右通过AJAX调用来轮询站点。

在用户会话上设置会话激活时间。然后为所有传入的请求添加一个筛选器到Web应用程序,以检查(激活时间+允许的时间)是否超过当前时间。如果不是,则调用session.invalidate();。

即登录

HttpSession session = request.getSession();session.setAttribute( "activation-time", System.currentTimeMillis() );

然后将过滤器添加到web.xml

<filter>    <filter-name>SessionFilter</filter-name>    <filter-class>com.something.SessionFilter</filter-class>    <init-param>        <param-name>max-period</param-name>        <param-value>60000</param-value>    </init-param></filter><filter-mapping>    <filter-name>SessionFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>

过滤器将类似于…

package com.something;import java.io.IOException;import java.util.Date;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;public class SessionFilter implements Filter {    private long maxPeriod;    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {        HttpServletRequest request = (HttpServletRequest) req;        HttpSession session = request.getSession( false );        if ( session != null ) { long activated = (long) session.getAttribute( "activation-time" ); if ( System.currentTimeMillis() > ( activated + maxPeriod ) ) {      session.invalidate(); }        }        chain.doFilter(req, res);    }    public void init(FilterConfig config) throws ServletException {        //Get init parameter        if ( config.getInitParameter("max-period") == null ) {  throw new IllegalStateException( "max-period must be provided" );        }        maxPeriod = new Long( config.getInitParameter("max-period") );    }    public void destroy() {        //add pre to release any resource    }}

如果在会话无效时需要调用某些内容,则可以

HttpSessionListener
在web.xml中编写和配置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号