public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
HttpSession session = request.getSession(false);
if(session == null || session.getAttribute("SPRING_SECURITY_CONTEXT") == null){
logger.info("------------NOT LOGINED--------------");
// 첫 로그인
} else if(session != null && session.getAttribute("sessionVo") != null
&& session.getAttribute("SPRING_SECURITY_CONTEXT") != null){
logger.info("--------------LOGINED----------------");
} else if(session != null && session.getAttribute("SPRING_SECURITY_CONTEXT") != null
&& session.getAttribute("sessionVo") == null){
logger.info("----------SESSIONVO EXPIRED----------");
session.invalidate();
response.sendRedirect(request.getRequestURI());
return false;
}
return true;
}
코드 수정함
원래 목적은 session 이 없을때는 spring-security 로 넘기는 식으로 하려 했으나
interceptor의 개입시점이 spring-security 보다 늦는 문제가 있다
그래서 sessionVo 가 소멸됬을때 session 전체를 소멸하고 다시 request url 로 이동하는 식으로 했다
이는 POST 방식일때 같은 url 로 get방식으로 이동하므로 restful 스타일에 알맞다
2013년 9월 5일 목요일
Session 관리
오랫동안 자리를 비우거나 할때 session 이 유실되면
로그인 정보와 동기화가 맞지 않아 오류를 낼 때가 있다.
모든 페이지에서 세션검사를 하는 것은 매우 비효율적이다.
Interceptor 를 통해서 손쉽게 관리가 가능하다.
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기