spring 3.1 버전은 exclude mapping path 기능이 없어서
인터셉터에서 직접 제외시킬 링크를 등록시켜줘야한다
1. egov-com-servlet.xml 인터셉터등록
보통 src/main/webapp/WEB-INF/config/egovframework/springmvc 아래에 위
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean id="loginInterceptor" class="egovframework.com.main.web.interceptor.LoginInterceptor" >
</bean>
</mvc:interceptor>
</mvc:interceptors>
2.서비스단에서 interceptor.java 생성
public class LoginInterceptor extends HandlerInterceptorAdapter {
private static final String LOGIN = "login";
private static final Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
@Resource(name = "egovMainViewService")
private EgovMainViewService Service;
public String[] createUrlArray(LevelAuthVO auth) {
if (auth == null || auth.getAuthlist() == null) {
return new String[0]; // 또는 null을 반환해도 됨
} else {
return auth.getAuthlist().split(",");
}
}
//아래 단어가 들어가려는 주소에 포함되어있으면 접속가능
public boolean defaultUrl(String requestUrl) {
if (requestUrl.contains("/EgovLogin.do")
|| requestUrl.contains("/start")
|| requestUrl.contains("start")
|| requestUrl.contains("/EgovLogin.do")
|| requestUrl.contains("css/")
|| requestUrl.contains("images/")
|| requestUrl.contains("cmm/")
|| requestUrl.contains("updateAdminAuth.do")
|| requestUrl.contains("selectAdminAuth.do")
|| requestUrl.contains("/mobdt")
|| requestUrl.contains(".ico")
|| requestUrl.contains("/pop")
|| requestUrl.contains("selectUri.do")) {
return true;
}else {
return false;
}
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
String requestUrl = request.getRequestURL().toString();
LoginApiResponse userVO = null;
egovframework.com.dt.service.LoginApiResponse dtUserVO = null;
try{
userVO = (LoginApiResponse) session.getAttribute("userVO");
dtUserVO = (egovframework.com.dt.service.LoginApiResponse) session.getAttribute("dtUserVO");
}catch(Exception e){
session.invalidate();
userVO = null;
dtUserVO = null;
}
System.out.println("requesturl is : " + requestUrl);
// userVO가 null이면 세션에 "userVO" 속성이 설정되어 있지 않은 상태이므로 예외 처리.
// 즉, 세션이 없어도(로그인을 안해도) 접속가능한 곳
if (userVO == null) {
if(defaultUrl(requestUrl)){
return defaultUrl(requestUrl);
}else{
response.sendRedirect(request.getContextPath() + "/start/EgovLogin.do");
return false;
}
} else {
// 로그인 해야 접속가능한 곳
try {
String[] adminUrlArr, operatorUrlArr, userUrlArr, guestUrlArr;
List<LevelAuthVO> auth = Service.selectAdminAuth();
adminUrlArr = createUrlArray(auth.get(0));
operatorUrlArr = createUrlArray(auth.get(1));
userUrlArr = createUrlArray(auth.get(2));
guestUrlArr = createUrlArray(auth.get(3));
if (userVO.getLevel().equals("admin")) {
return true; // admin은 어디든 접속가능
} else if (userVO.getLevel().equals("operator")) {
if (operatorUrlArr.length == 1 && operatorUrlArr[0].equals("")) {
if(defaultUrl(requestUrl)) {
return true;
}else {
response.sendRedirect(request.getContextPath() + "/start/noauth.do");
return false;
}
}
boolean isAllowed = false;
for (String allowedUrl : operatorUrlArr) {
if (requestUrl.contains(allowedUrl)) {
isAllowed = true;
break;
}
}
if (!isAllowed) {
if(defaultUrl(requestUrl)) {
return true;
}else {
response.sendRedirect(request.getContextPath() + "/start/noauth.do");
return false;
}
}
return true;
} else if (userVO.getLevel().equals("user")) {
if (userUrlArr.length == 1 && userUrlArr[0].equals("")) {
if(defaultUrl(requestUrl)) {
return true;
}else {
response.sendRedirect(request.getContextPath() + "/start/noauth.do");
return false;
}
}
boolean isAllowed = false;
for (String allowedUrl : userUrlArr) {
if (requestUrl.contains(allowedUrl)) {
isAllowed = true;
break;
}
}
if (!isAllowed) {
if(defaultUrl(requestUrl)) {
return true;
}else {
response.sendRedirect(request.getContextPath() + "/start/noauth.do");
return false;
}
}
return true;
} else if (userVO.getLevel().equals("guest")) {
if (guestUrlArr.length == 1 && guestUrlArr[0].equals("")) {
if(defaultUrl(requestUrl)) {
return true;
}else {
response.sendRedirect(request.getContextPath() + "/start/noauth.do");
return false;
}
}
boolean isAllowed = false;
for (String allowedUrl : guestUrlArr) {
if (requestUrl.contains(allowedUrl)) {
isAllowed = true;
break;
}
}
if (!isAllowed) {
if(defaultUrl(requestUrl)) {
return true;
}else {
response.sendRedirect(request.getContextPath() + "/start/noauth.do");
return false;
}
}
return true;
}
} catch (Exception e) {
// 예외 처리 로직을 작성합니다.
e.printStackTrace(); // 예외 메시지를 출력합니다.
response.sendRedirect(request.getContextPath() + "/start/EgovLogin.do");
return false; // 예외 발생 시 기본적으로 거부합니다.
}
}
return false;
}
/**
* 세션에 메뉴권한(LoginVO.userGubun)을 가지고 메뉴를 조회하여 권한 여부를 체크한다.
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
LoginApiResponse loginVO = null;
String requestURI = request.getRequestURI();
}
반응형
'웹 개발 > 🎆 JSP' 카테고리의 다른 글
JSP | 세션시간 설정하는법 (0) | 2024.03.25 |
---|---|
Apache Tomcat 버전에 따른 JSP, Servlet 버전 (0) | 2024.03.25 |
three.js JSP에 적용하기 (0) | 2024.03.08 |
JSP | postman,REST,JSON, Java CRAWLING (0) | 2022.12.05 |
JSP | 사진첨부파일 업로드,수정,삭제 가능한 게시판 (0) | 2022.12.04 |