@Component
public class NeedLoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!(handler instanceof HandlerMethod)) {
return true;
}
HttpSession session = request.getSession();
boolean isLogin = handleIfIsLogin(session);
boolean isExpired = handleIfIsExpired(session);
HandlerMethod handlerMethod = (HandlerMethod) handler;
if (null != handlerMethod.getMethodAnnotation(LoginRequiredType.class) || null != handlerMethod.getBeanType().getAnnotation(LoginRequiredType.class)) {
if (!isLogin) {
response.sendRedirect("/login");
} else {
if (isExpired)
{
StringBuffer redirectUrl = request.getRequestURL();
session.removeAttribute(Const.ATTR_LOGIN_MEMBER);
session.removeAttribute(Const.ATTR_LOGIN_TYPE);
response.sendRedirect("/login?redirectUrl=" + URLEncoder.encode(redirectUrl.toString(), "utf-8"));
}
}
}
return true;
}
private boolean handleIfIsLogin(HttpSession session) {
if ( session.getAttribute(Const.ATTR_LOGIN_MEMBER) == null ){
return false;
}
return true;
}
private boolean handleIfIsExpired(HttpSession session) {
long last_access_dttm = session.getLastAccessedTime();
Date now = new Date();
Date expired_dttm = new Date(last_access_dttm+Const.EXPIRED_LONG_TIME);
if (expired_dttm.after(now)){
return false;
}
return true;
}
}