본문 바로가기
Programming Language/Java

[Java] SessionTimeoutCookieFilter 관련 코드

by 뒹굴거리는프로도 2018. 12. 5.
반응형

 


 

package kr.or.noiseinfo.cmmn;

import java.io.IOException;

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.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.http.HttpSession;

/**
 * SessionFlagFilter.java
 *
 * @author
 * @since 2018.12.05
 * @version 1.0
 * @see
 *
 *      <pre>
 * << 개정이력(Modification Information) >>
 *
 *   수정일      수정자           수정내용
 *  -------    --------    ---------------------------
 *
 *
 *      </pre>
 */
public class SessionTimeoutCookieFilter implements Filter {

    @SuppressWarnings("unused")
    private FilterConfig config;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {

        HttpServletResponse httpResp = (HttpServletResponse) response;
        HttpServletRequest httpReq = (HttpServletRequest) request;

        long currTime = System.currentTimeMillis();
        long expiryTime = currTime + (((HttpServletRequest) request).getSession().getMaxInactiveInterval() * 60000);

        Cookie cookie = new Cookie("serverTime", "" + currTime);

        cookie.setPath("/");
        httpResp.addCookie(cookie);


        Cookie cookie2 = new Cookie("sessionExpiry", "" + expiryTime);
        // responseWrapper.setHeader("Set-Cookie", "sessionExpiry=" + expiryTime
        // + ";Path=/; Secure; HttpOnly");

        cookie2.setPath("/");

        httpResp.addCookie(cookie2);

        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
    }

    @Override
    public void destroy() {

    }
}
 

 

층간소음 이웃사이서비스 세션 시간 안내 시, 자바 단 소스. 

  • HttpServletRequest의 getSession, getMaxInactiveInterval을 사용하여 세션의 최대 비활성 간격을 가져옴
  • 서버 사이드 시간과 브라우저의 시간 카운트가 달라서 주기적으로 동기화하기 위해 쿠키 설정.
  • 첫 번째 쿠키는 serverTime이라는 이름으로 현재 시간을 저장하고, 두 번째 쿠키는 sessionExpiry라는 이름으로 세션 만료 시간을 저장함.
  • 두 쿠키 모두 경로를 "/"로 설정하여 (setPath 사용) 도메인의 모든 페이지에서 사용할 수 있도록 하고, HttpServletResponse 객체 httpResp를 통해 클라이언트에게 전송했음.

 


 

반응형