CommonInterceptor역시 클래스를 상속받아 구현하는 방법으로 인터셉터를 만들었다.
또한 preHandle, postHandle두개 메소드만 구현했다.
1. 메소드 구현 전에 필요한 리소스를 로드한다.
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private CacheRoleManager cacheRoleManager;
/** Common Service */
@Autowired
protected @Qualifier("commonService") CommonService commonService;
- Logger는 로그 정보에 남겨야 하기때문에 이 클래스 자체를 파라미터로 넘겨줬다.
- CacheRoleManager는 혹시모를 캐시처리를 하기위해 선언한다.
- CommonService 객체는 DB처리를 위해 선언한다. Qualifier는 CommonServiceImpl임을 의미한다.CommonServiceImpl상단에 Qualifier를 "commonService"로 선언할것이다.
참고 : https://m.blog.naver.com/sksk3479/221178451242
2. preHandle
String currentUrl = request.getRequestURL().toString();
String currentUrlPattern = currentUrl.replace("http://", "");
currentUrlPattern = currentUrlPattern.replace("https://", "");
currentUrlPattern = currentUrlPattern.substring(currentUrlPattern.indexOf("/"), currentUrlPattern.lastIndexOf("/"));
if(currentUrl.indexOf("/front/") < 0 && currentUrl.indexOf("/test/") < 0 ){
String adminId = null;
try {
if (currentUrl.indexOf("/resources/") < 0) {
UserVO userVO = (UserVO) UserInfoUtil.getUserInfo();
request.setAttribute("adminInfo", userVO);
adminId = userVO.getUserId();
}
} catch (Exception e) {
logger.info("Auth Error");
}
cacheRoleManager.initRole(adminId);
LinkedHashMap<String, SecurityRoleVO> cacheRole = cacheRoleManager.getRole();
}
- 함수선언 및 시작, 끝 표시 로그는 제외한 내용이다.
- currentUrl로 인증을 제외할 url을 비교하기 위한 변수를 만들었다.
- http://, https://제외, 맨앞과 맨뒤"/" 제거했다.
- /front/와 /test/ url일때는 인증을 제외한다. (로그인을 하지 않아도 접속할수 있게 만들것이다.)
- /resources/ url일때는 UserVO에 인증정보를 adminInfo에 정보를 넣는다.
- 캐시로 adminId를 등록했다.
- cacheRole에 가져온 Role를 HashMap으로 등록한다.
3. postHandle
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("COMMON INTERCEPTOR POST START");
}
// 1. Parameter Log
if (logger.isDebugEnabled()) {
logger.debug("=================================");
logger.debug("Base Info =======================");
logger.debug("URL : " + request.getRequestURL());
logger.debug("=================================");
logger.debug("Parameters ======================");
@SuppressWarnings("rawtypes")
Enumeration em = request.getParameterNames();
while (em.hasMoreElements()) {
String name = (String) em.nextElement();
String values[] = request.getParameterValues(name);
if (values != null) {
for (int i = 0; i < values.length; i++) {
logger.debug(name + ": " + values[i]);
}
}
}
}
if (logger.isDebugEnabled()) {
logger.debug("COMMON INTERCEPTOR POST END");
}
}
- FrontInterceptor와 마찬가지로 URL을 표시하도록 한다.
- 파라미터도 로그에 표시하도록 한다.
CommonInterceptor 끝.
'쓸만한 JSP 홈페이지 만들기' 카테고리의 다른 글
SpringSecurity 설정(1) - security-context.xml (0) | 2019.10.16 |
---|---|
Spring 설정xml - property-context.xml (0) | 2019.07.08 |
공통클래스 - FrontInterceptor (0) | 2019.07.02 |
Spring 설정xml - interceptor-context.xml (0) | 2019.07.02 |
Spring 설정xml - file-context.xml (0) | 2019.07.02 |