본문 바로가기
정리or해석

커스텀 어노테이션 적용후,인터셉터에 적용하기

by shulk 2024. 7. 12.

  
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface LoginRequiredType {
LoginType value() default LoginType.ADMIN;
public enum LoginType {
ADMIN, // GHS 연동을 위한 로그인이 필요
BOOTH // AAF 기능을 쓰기 위한 로그인 필요 - ex ) facebook
}
}

  
@Component
public class NeedLoginInterceptor implements HandlerInterceptor {
//public class NeedLoginInterceptor extends AnnotationBasedHandlerInterceptorAdapter<LoginRequiredType> {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//어노테이션 체크 - Controller에 @Auth 어노테이션이 있는지 확인
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) {//1. 비로그인 유저
response.sendRedirect("/login");
} else {
if (isExpired)//2. 로그인 유저이지만 타임아웃
{
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;
}
}

'정리or해석' 카테고리의 다른 글

엑셀에 있는 데이터를 PANDAS 이용해서 DB에 저장  (0) 2024.08.05
css,JavaScript관련  (0) 2024.07.18
실무 다른 동료 SQL문 분석  (0) 2024.07.11
MySql의 암호화,복호화  (0) 2024.07.04
XSS 공격 방지용 XssFilter  (0) 2024.06.25