상황마다의 틀린 return 매핑
- 작성자 :
- 김*현
- 작성일 :
- 2010-03-08 18:20:18
- 조회수 :
- 6,279
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
URL : http://localhost:8080 이와같이 로그인페이지 접근
Eclipse에 Tomcat 6.0을 연동을 시켜서 사용합니다. 아래는 server.xml의 내용으로 login이라는 프로젝트로 구성을 해서 이미지 등의 다른 파일의 경로 때문에 아래와 같이 구성을 하였습니다.
<Host appBase="login/target/classes" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
<Context docBase="/login" path="" reloadable="true" source="org.eclipse.jst.j2ee.server:login"/></Host>
로그인 페이지로의 이동은 index.jsp의
<jsp:forward page="/uat/uia/egovLoginUsr.do"/> 로 이동후 uat/uia/web/EgovLoginController.java의 loginUsrView method의 return "cmm/uat/uia/EgovLoginUsr" 를 통해서 cmm/uat/uia/EgovLoginUsr.jsp인 로그인 페이지가 잘 뜹니다.
그러나 http://localhost:8080/cmm/uat/uia/EgoLoginUsr.jsp 이 URL을 직접 접근을 시도해 보았으나 404에러가 뜹니다.
Controller를 통해서 로그인페이지로 접근이 가능한데
직접 접근은 불가능합니다.
WEB-INF/jsp/egvframework/ 이 경로의 하위 다른 폴더에 존재하는 모든 페이지는 접근이 불가능 하지만 (예:http://localhost:8080/cmm/uat/uia/EgoLoginUsr.jsp)
WEB-INF/jsp/egvframework/에 존재하는 EgovMainView.jsp는
http://localhost:8080/EgoMainView.jsp로 접근이 가능합니다.
로그인을 TEST1/1 업무사용자로 로그인을 하게 되면
/uat/uia/web/EgovLoginController.java의 actionLogin method에서
다음과 같은 return을 타게 됩니다.
return "redirect:/j_spring_security_check?j_username=" + resultVO.getUserSe() + resultVO.getId() + "&j_password=" + resultVO.getUniqId();
그 이후에 context-security.xml의 내용으로
<http access-denied-page="/cmm/sec/ram/accessDenied.do" path-type="regex" lowercase-comparisons="false">
<form-login login-processing-url="/j_spring_security_check"
authentication-failure-url="/uat/uia/egovLoginUsr.do?login_error=1"
default-target-url="/uat/uia/actionMain.do"
login-page="/index.jsp?flag=L" />
<anonymous/>
<logout logout-url="/j_spring_security_logout" logout-success-url="/index.jsp" />
<concurrent-session-control max-sessions="500" exception-if-maximum-exceeded="true" expired-url="/index.jsp" />
</http>
위와 같은 내용에 의해서 accessDenied.do 의 경로인 sec/ram/web/EgovAuthorManageController.java의 accessDenied method의
return "cmm/sec/accessDeined";로 가는 도중에 404 에러가 발생합니다.
분명히 cmm/sec/accessDeinied.jsp 파일은 존재합니다.
에러 내용은 아래와 같습니다.
Rendering view [org.springframework.web.servlet.view.RedirectView: unnamed; URL [/j_spring_security_check?j_username=USRTEST1&j_password=USRCNFRM_00000000000]] in DispatcherServlet with name 'action'
project 이름은 첨부파일에 올려두었습니다.
에러가 나는 이유를 알수가 없습니다.
Eclipse에 Tomcat 6.0을 연동을 시켜서 사용합니다. 아래는 server.xml의 내용으로 login이라는 프로젝트로 구성을 해서 이미지 등의 다른 파일의 경로 때문에 아래와 같이 구성을 하였습니다.
<Host appBase="login/target/classes" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
<Context docBase="/login" path="" reloadable="true" source="org.eclipse.jst.j2ee.server:login"/></Host>
로그인 페이지로의 이동은 index.jsp의
<jsp:forward page="/uat/uia/egovLoginUsr.do"/> 로 이동후 uat/uia/web/EgovLoginController.java의 loginUsrView method의 return "cmm/uat/uia/EgovLoginUsr" 를 통해서 cmm/uat/uia/EgovLoginUsr.jsp인 로그인 페이지가 잘 뜹니다.
그러나 http://localhost:8080/cmm/uat/uia/EgoLoginUsr.jsp 이 URL을 직접 접근을 시도해 보았으나 404에러가 뜹니다.
Controller를 통해서 로그인페이지로 접근이 가능한데
직접 접근은 불가능합니다.
WEB-INF/jsp/egvframework/ 이 경로의 하위 다른 폴더에 존재하는 모든 페이지는 접근이 불가능 하지만 (예:http://localhost:8080/cmm/uat/uia/EgoLoginUsr.jsp)
WEB-INF/jsp/egvframework/에 존재하는 EgovMainView.jsp는
http://localhost:8080/EgoMainView.jsp로 접근이 가능합니다.
로그인을 TEST1/1 업무사용자로 로그인을 하게 되면
/uat/uia/web/EgovLoginController.java의 actionLogin method에서
다음과 같은 return을 타게 됩니다.
return "redirect:/j_spring_security_check?j_username=" + resultVO.getUserSe() + resultVO.getId() + "&j_password=" + resultVO.getUniqId();
그 이후에 context-security.xml의 내용으로
<http access-denied-page="/cmm/sec/ram/accessDenied.do" path-type="regex" lowercase-comparisons="false">
<form-login login-processing-url="/j_spring_security_check"
authentication-failure-url="/uat/uia/egovLoginUsr.do?login_error=1"
default-target-url="/uat/uia/actionMain.do"
login-page="/index.jsp?flag=L" />
<anonymous/>
<logout logout-url="/j_spring_security_logout" logout-success-url="/index.jsp" />
<concurrent-session-control max-sessions="500" exception-if-maximum-exceeded="true" expired-url="/index.jsp" />
</http>
위와 같은 내용에 의해서 accessDenied.do 의 경로인 sec/ram/web/EgovAuthorManageController.java의 accessDenied method의
return "cmm/sec/accessDeined";로 가는 도중에 404 에러가 발생합니다.
분명히 cmm/sec/accessDeinied.jsp 파일은 존재합니다.
에러 내용은 아래와 같습니다.
Rendering view [org.springframework.web.servlet.view.RedirectView: unnamed; URL [/j_spring_security_check?j_username=USRTEST1&j_password=USRCNFRM_00000000000]] in DispatcherServlet with name 'action'
project 이름은 첨부파일에 올려두었습니다.
에러가 나는 이유를 알수가 없습니다.
A
안녕하세요.. 김재현님..
tomcat에 webapp를 지정(Context 부분)하시면서 docBase 즉 contextRoot가 /login으로 지정되어 발생한 오류들입니다.
<jsp:forward/> 나 <c:url/> 등의 경우 자동으로 contextRoot가 지정되어서 호출되기 때문에 문제가 없지만...
고정된 리소스들(css, js 등)에서의 호출은 자동으로 contextRoot를 지정할 수 없기 때문에 contextRoot가 지정된 경우 별도로 하드코딩으로 지정해 주셔야 합니다.
그런 의미에서 공통컴포넌트의 경우 "/"로 처리되었습니다.
추가적으로 질문의 예를 설명드리면..http://localhost:8080/cmm/uat/uia/EgoLoginUsr.jsp가 아닌
http://localhost:8080/login/cmm/uat/uia/EgoLoginUsr.jsp 으로..
앞쪽에 contextRoot를 지정하셔야 합니다..
그럼. 즐거운 하루되십시오.
감사합니다.
tomcat에 webapp를 지정(Context 부분)하시면서 docBase 즉 contextRoot가 /login으로 지정되어 발생한 오류들입니다.
<jsp:forward/> 나 <c:url/> 등의 경우 자동으로 contextRoot가 지정되어서 호출되기 때문에 문제가 없지만...
고정된 리소스들(css, js 등)에서의 호출은 자동으로 contextRoot를 지정할 수 없기 때문에 contextRoot가 지정된 경우 별도로 하드코딩으로 지정해 주셔야 합니다.
그런 의미에서 공통컴포넌트의 경우 "/"로 처리되었습니다.
추가적으로 질문의 예를 설명드리면..http://localhost:8080/cmm/uat/uia/EgoLoginUsr.jsp가 아닌
http://localhost:8080/login/cmm/uat/uia/EgoLoginUsr.jsp 으로..
앞쪽에 contextRoot를 지정하셔야 합니다..
그럼. 즐거운 하루되십시오.
감사합니다.