spring security forward 문제
- 작성자 :
- 정*주
- 작성일 :
- 2015-12-23 11:42:39
- 조회수 :
- 1,631
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요 spring security 관련해서 문의드립니다.
spring security 에서 아래 같이 패턴별 권한이 설정되어있습니다.
<intercept-url pattern="/login/**" access="permitAll" />
<intercept-url pattern="/main/**" access="hasRole('ROLE_User')" />
<intercept-url pattern="/admin/**" access="hasRole('ROLE_Admin')" />
Controller에서 아래와 같이 두개의 메서드가 정의 되어 있고,
여기서 로그인한 사용자는 ROLE_User권한만 있습니다.
그렇다면 브라우저에 /main/test.do로 요청을 하면 정상수행이 되고
/admin/adminPage.do 하면 권한 오류가 발생합니다.
그런데 /main/test.do에서 return foward:admin/adminPage.do 내용을 추가하면
/admin/adminPage.do 페이지가 권한이 없음에도 불구하고 접근이 되어집니다.
이때 forward를 Redirect로 변경하면 접근이 안됩니다.
오류가 있는 것인지 forward를 했을 때는 스프링시큐리티에서 패턴에 대한 체크를 하지않는지 알고 싶습니다.
@RequestMapping(value = "/main/test.do")
public String test(HttpSession session, Principal principal) throws Exception {
return "forward:/admin/adminPage.do";
}
@RequestMapping(value = "/admin/adminPage.do")
public void adminPage(HttpSession session, Principal principal) throws Exception {
System.out.println("admin Page 출력 ");
}
** 내용추가 **
검색하다보니 이전 답변에
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
이 설정을 추가하면 된다는 글을 보고 적용해보았습니다.
그런데 <http pattern="/error/**" security="none" /> 로 지정했던 부분들도 spring security가 접근못하게
막아버리네요.. /error/error.do 이런거는 필터안타도록 해놓은건데 위에 설정을 해버리면
이부분이 무시되나보아요,, 혹시 다른 방법은 없을까요??
감사합니다.
spring security 에서 아래 같이 패턴별 권한이 설정되어있습니다.
<intercept-url pattern="/login/**" access="permitAll" />
<intercept-url pattern="/main/**" access="hasRole('ROLE_User')" />
<intercept-url pattern="/admin/**" access="hasRole('ROLE_Admin')" />
Controller에서 아래와 같이 두개의 메서드가 정의 되어 있고,
여기서 로그인한 사용자는 ROLE_User권한만 있습니다.
그렇다면 브라우저에 /main/test.do로 요청을 하면 정상수행이 되고
/admin/adminPage.do 하면 권한 오류가 발생합니다.
그런데 /main/test.do에서 return foward:admin/adminPage.do 내용을 추가하면
/admin/adminPage.do 페이지가 권한이 없음에도 불구하고 접근이 되어집니다.
이때 forward를 Redirect로 변경하면 접근이 안됩니다.
오류가 있는 것인지 forward를 했을 때는 스프링시큐리티에서 패턴에 대한 체크를 하지않는지 알고 싶습니다.
@RequestMapping(value = "/main/test.do")
public String test(HttpSession session, Principal principal) throws Exception {
return "forward:/admin/adminPage.do";
}
@RequestMapping(value = "/admin/adminPage.do")
public void adminPage(HttpSession session, Principal principal) throws Exception {
System.out.println("admin Page 출력 ");
}
** 내용추가 **
검색하다보니 이전 답변에
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
이 설정을 추가하면 된다는 글을 보고 적용해보았습니다.
그런데 <http pattern="/error/**" security="none" /> 로 지정했던 부분들도 spring security가 접근못하게
막아버리네요.. /error/error.do 이런거는 필터안타도록 해놓은건데 위에 설정을 해버리면
이부분이 무시되나보아요,, 혹시 다른 방법은 없을까요??
감사합니다.
A
안녕하세요.
표준프레임워크 센터 입니다.
<http pattern="/error/**" security="none" />
>에러처리 관련된 pattern을 설정하는 옵션 입니다.
>내부적인 에러처리 정책에 따라서 사용 유무를 결정 하시면 될꺼 같습니다.
질문하신 내용만으로는 정확한 진단은 힘들꺼 같습니다.
표준프레임워크에서 제공하는 스프링시큐리티에서는 forward는 정상 작동하는걸로 알고 있습니다.
한가지 더 말씀 드리자면
Spring Security의 정보(SecurityContext)를 사용하시려면 web.xml에 정의된 springSecurityFilterChain filter가 호출되는 request이어야 합니다.
즉, jsp를 직접 호출하시거나, filter를 타지 않는 경우의 forward된 경우에는 인증 정보 등을 가져오지 못합니다.
이점 참고 하시면 될꺼 같습니다.
감사합니다.
표준프레임워크 센터 입니다.
<http pattern="/error/**" security="none" />
>에러처리 관련된 pattern을 설정하는 옵션 입니다.
>내부적인 에러처리 정책에 따라서 사용 유무를 결정 하시면 될꺼 같습니다.
질문하신 내용만으로는 정확한 진단은 힘들꺼 같습니다.
표준프레임워크에서 제공하는 스프링시큐리티에서는 forward는 정상 작동하는걸로 알고 있습니다.
한가지 더 말씀 드리자면
Spring Security의 정보(SecurityContext)를 사용하시려면 web.xml에 정의된 springSecurityFilterChain filter가 호출되는 request이어야 합니다.
즉, jsp를 직접 호출하시거나, filter를 타지 않는 경우의 forward된 경우에는 인증 정보 등을 가져오지 못합니다.
이점 참고 하시면 될꺼 같습니다.
감사합니다.