Java Backgrond服务不影响http会话超时

Java Backgrond服务不影响http会话超时,java,html,servlet-3.0,Java,Html,Servlet 3.0,我需要在后台使用JavaScript创建定期调用的HTTP服务 每次呼叫不得影响会话超时(会话时钟功能) 可能吗?该如何可靠地完成呢?好的,我是在的帮助下完成的。 会话过期期限存储在会话中,并由http请求更新。那些带有无状态参数的更新过期超时时间无效。 这是我的密码: public class SessionTimeoutFilter implements Filter { private static final Logger log = LoggerFactory.getLogger(S

我需要在后台使用JavaScript创建定期调用的HTTP服务

每次呼叫不得影响会话超时(会话时钟功能)

可能吗?该如何可靠地完成呢?

好的,我是在的帮助下完成的。 会话过期期限存储在会话中,并由http请求更新。那些带有无状态参数的更新过期超时时间无效。 这是我的密码:

public class SessionTimeoutFilter implements Filter {

private static final Logger log = LoggerFactory.getLogger(SessionTimeoutFilter.class);

/** The http stateless request parameter name. */
private final static String PAR_HTTP_STATELESS_REQUEST = "stateless";

/** The session expiry time argument name. */
private final static String ARG_SESSION_EXPIRY_TIME = "sessionExpiryTime";

@Override
public void init(FilterConfig filterConfig) throws ServletException {}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
    try {
        HttpServletRequest httpReq = (HttpServletRequest) request;

        if (httpReq.getParameterMap().containsKey(PAR_HTTP_STATELESS_REQUEST)) {
            // do nothing
        } else {
            HttpSession session = httpReq.getSession(false);
            if (session != null) {
                Object expirationTime = session.getAttribute(ARG_SESSION_EXPIRY_TIME);

                if (expirationTime != null && expirationTime instanceof Long) {
                    Long expirationDate = (Long) expirationTime;

                    if (expirationDate < System.currentTimeMillis()) {
                        // manual expiration
                        session.invalidate();
                        session = null;
                    }
                } 

                // session still active
                if (session != null) {
                    long currTime = System.currentTimeMillis();
                    long expiryTime = currTime + session.getMaxInactiveInterval() * 1000;

                    // new expiration deadline
                    session.setAttribute(ARG_SESSION_EXPIRY_TIME, new Long(expiryTime));
                }
            }
        }
    } catch (Exception e) {
        log.error("Unable set session timeout cookies due to: " + e, e);
    }

    filterChain.doFilter(request, response);
}

@Override
public void destroy() {}
公共类SessionTimeoutFilter实现了过滤器{
私有静态最终记录器log=LoggerFactory.getLogger(SessionTimeoutFilter.class);
/**http无状态请求参数名称*/
私有最终静态字符串PAR_HTTP_STATELESS_REQUEST=“STATELESS”;
/**会话到期时间参数名称*/
私有最终静态字符串ARG\u SESSION\u EXPIRY\u TIME=“sessionExpiryTime”;
@凌驾
public void init(FilterConfig FilterConfig)抛出ServletException{}
@凌驾
public void doFilter(ServletRequest请求、ServletResponse响应、FilterChain FilterChain)抛出IOException、ServletException{
试一试{
HttpServletRequest httpReq=(HttpServletRequest)请求;
if(httpReq.getParameterMap().containsKey(无状态请求)){
//无所事事
}否则{
HttpSession session=httpReq.getSession(false);
if(会话!=null){
对象过期时间=session.getAttribute(ARG\u session\u expiration\u TIME);
if(expirationTime!=null&&expirationTime instanceof Long){
长到期日期=(长)到期时间;
if(expirationDate
}