Java Backgrond服务不影响http会话超时
我需要在后台使用JavaScript创建定期调用的HTTP服务 每次呼叫不得影响会话超时(会话时钟功能) 可能吗?该如何可靠地完成呢?好的,我是在的帮助下完成的。 会话过期期限存储在会话中,并由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
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
}