๊ธฐ๋ณธ์ ์ผ๋ก ajax polling์ ์ด์ฉํด์ checkํด์ผ ํ๋๊ฒ์ผ๋ก ํ๋จํ๊ณ ์์ต๋๋ค.
secuity filter์ค์ย SessionManagementFilter ๋ผ๋ ๋์ด ์์ต๋๋ค.
๊ทธ filter์ InvalidSessionStrategy ๋ผ๋๊ฒ์ผ๋ก request๊ฐ ๋ค์ด์ฌ๊ฒฝ์ฐ session filter์์ checkํด์ handler๋ก ๋ณด๋ด๋ฒ๋ฆฌ๋ ์ ๋ต์
๋๋ค.ย
์์ namkyu๋์ด ์ ์ํ๋ ๋ฐฉ์๊ณผ ์ ์ฌํฉ๋๋ค๋ง, session listener๋ฑ์ ํตํด์ ๋น๋๊ธฐ ์ด๋ฒคํธ๋ฅผ ๋ณด๋ด๋ฒ๋ฆฌ๋ ๋ฐฉ์๋ ์์ต๋๋ค๋ง.(์๊ฐ๋ง ํ๊ณ ๊ตฌํ์..์ฟจ๋ญ;;)
public class CustomInvalidSessionStrategy implements InvalidSessionStrategy {
private Logger logger = LoggerFactory.getLogger(getClass());
private RequestMatcher requestMatcher = new ELRequestMatcher("hasHeader('X-Requested-With','XMLHttpRequest')");
@Override
public void onInvalidSessionDetected(HttpServletRequest request,
HttpServletResponse response) throws IOException, ServletException {
// TODO Auto-generated method stub
boolean ajaxRedirect = requestMatcher.matches(request);
if(ajaxRedirect) {
logger.debug("Session expired due to ajax request, starting a new session and redirect to requested status '{}'", 901);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.sendError(901, "SESSION_TIMED_OUT");
} else {
String requestURI = getRequestUrl(request);
logger.debug("Session expired due to non-ajax request, starting a new session and redirect to requested url '{}'", requestURI);
request.getSession(true);
response.sendRedirect(requestURI);
}
}
private String getRequestUrl(HttpServletRequest request) {
ย ย ย ย StringBuffer requestURL = request.getRequestURL();
ย
ย ย ย ย String queryString = request.getQueryString();
ย ย ย ย if (StringUtils.hasText(queryString)) {
ย ย ย ย ย ย requestURL.append("?").append(queryString);
ย ย ย ย }
ย
ย ย ย ย return requestURL.toString();
ย ย }
}