@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String contextPath = request.getContextPath();
if(handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod)handler;
RefererUncheck lefererUncheck = handlerMethod.getMethodAnnotation(RefererUncheck.class);
logger.info("Header Check. (getRemoteAddr=" + StringUtils.trimToNull(request.getRemoteAddr()) + ")");
logger.info("Header Check. (getRequestUrl=" + StringUtils.trimToNull(request.getRequestURI().substring(contextPath.length())));
try {
// URL 접속정보
String referer = StringUtils.trimToNull(request.getHeader("Referer"));
logger.info("referer : " + referer);
// 리퍼럴 어노테이션이 없고, ajax 통신이 아닌경우만 체크
if (lefererUncheck == null && !this.isAjaxRequest(request)) {
logger.debug("Referer Check Start! (Referer=" + StringUtils.trimToNull(request.getHeader("Referer")) + ")");
logger.debug("Referer Check success! (URI=" + request.getRequestURI() + ")");
if (StringUtils.isEmpty(referer)) {
throw new CustomException("error.referer");
}
}
} catch (CustomException be) {
request.getRequestDispatcher(contextPath+ "/cmm/error.jsp").forward(request, response);
return false;
} catch (Exception e) {
logger.error(e.getMessage());
return false;
}
}
return true;
}
private boolean isAjaxRequest(HttpServletRequest request) {
final String header = request.getHeader(Constants.AJAX_HEADER);
if( header != null && header.equals("true") ) {
return true;
}
return false;
}