1. web.xml 설정(중간에 로그인 체크를 위한 인터셉터를 추가하는 것이면 이미 설정 되어있을 것이다.)
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
2. dispatcher-servlet.xml 설정(프로젝트마다 파일이름이 다를 수 있다.)
<mvc:interceptor>
<mvc:mapping path="/**/*View.do"/> <!-- 절대경로(/)부터 시작하면 중간경로가 있을 수 있기에 (**)으로 표시 -->
<mvc:exclude-mapping path="/cmn/login/*.do"/> <!-- 예외 경로 지정 -->
<mvc:exclude-mapping path="/mon/page/loginView.do"/> <!-- 예외 경로 지정(여러개일 수 있음으로...) -->
<bean class="egovframework.cmn.cmn.AuthInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
3. AuthInterceptor.java 설정
/**
* 세션에 계정정보(LoginVO)가 있는지 여부로 인증 여부를 체크한다. 계정정보(LoginVO)가 없다면, 로그인 페이지로 이동한다.
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
LoginVO loginVO = null;
try {
loginVO = (LoginVO) request.getSession().getAttribute("loginVO");
if (loginVO != null && loginVO.getUserId() != null) {
return true;
} else {
ModelAndView modelAndView = new ModelAndView("forward:/loginView.do");
modelAndView.addObject("message", "세션이 만료되어 로그아웃 되었습니다. 다시 로그인 해주세요.");
throw new ModelAndViewDefiningException(modelAndView);
}
} catch (Exception e) {
ModelAndView modelAndView = new ModelAndView("forward:/loginView.do");
modelAndView.addObject("message", "세션이 만료되어 로그아웃 되었습니다. 다시 로그인 해주세요.");
throw new ModelAndViewDefiningException(modelAndView);
}
}
/**
* 세션에 메뉴권한(LoginVO.userGubun)을 가지고 메뉴를 조회하여 권한 여부를 체크한다.
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
LoginVO loginVO = null;
String requestURI = request.getRequestURI();
try {
if(!"/loginView.do".equals(requestURI)) {
loginVO = (LoginVO) request.getSession().getAttribute("loginVO");
if (loginVO != null && loginVO.getUserId() != null) {
SearchVO searchVO = new SearchVO();
searchVO.setSchMenuUrl(requestURI);
searchVO.setSchUserGubun(loginVO.getUserGubun());
List<?> resultList = sysadmService.getSelectRollMenuCheckList(searchVO);
if(resultList == null || resultList.size() == 0) {
ModelAndView mav = new ModelAndView("forward:/monitorView.do");
mav.addObject("message", "권한이 없습니다.");
throw new ModelAndViewDefiningException(mav);
}
} else {
ModelAndView mav = new ModelAndView("forward:/loginView.do");
mav.addObject("message", "세션이 만료되어 로그아웃 되었습니다. 다시 로그인 해주세요.");
throw new ModelAndViewDefiningException(mav);
}
}
} catch (Exception e) {
ModelAndView mav = new ModelAndView("forward:/monitorView.do");
mav.addObject("message", "권한이 없습니다.");
throw new ModelAndViewDefiningException(mav);
} }
}
4. 현재 진행 중인 프로젝트엔 세션 권한별 접근 메뉴 체크가 없기에 비워놈... 언젠가는 추가할지도??
5. 동일한 환경으로 새로운 프로젝트를 시작하여 권한도 추가하였다.
'개발 > JAVA' 카테고리의 다른 글
엑셀 다운로드(전자정부프레임워크 + Tabulator 사용) (0) | 2020.05.06 |
---|---|
전자정부프레임워크(3.8.0버전)에 Tiles 적용하기 (0) | 2020.04.10 |
ResourceBundle 사용하여 properties 파일 읽어오기 (0) | 2020.02.14 |
표준API 설치시(GPKI 설치시) 서버인증서값 세팅 (0) | 2019.09.16 |
Java에서 json 형태로 화면으로 떨구기 (0) | 2019.06.17 |