2012-04-26 3 views
0

내 리소스에 @RequiresGuest 주석이있는 메소드가 있습니다. 로그인 한 사용자가 링크를 클릭하면이 메시지가있는 UnauthenticatedException이 표시됩니다.Shiro의 UnauthenticatedException을 처리하는 방법

게스트 전용 작업을 시도합니다. 현재 Subject는 게스트가 아닌 입니다 (이전에 로그인 한 에서 인증되었거나 기억 된 사용자). 접근 불가.

하지만 어떻게 처리합니까? 예를 들어 요청을 로그 아웃 페이지로 리디렉션하는 방법은 무엇입니까?

답변

1

이 선택한 MVC 프레임 워크에 따라 일반적으로 의존한다 :

  • 일부 UI 메커니즘 (예를 들어, JSP가) 당신이 예외를 처리하는 데 사용할 수있는 '오류 페이지'를 가질 수 있습니다.
  • 더 세련된 UI 프레임 워크에는 원하는 모든 작업을 수행 할 수있는 '모든 사람에게 캐치'예외 처리기 및/또는 컨트롤러가 있습니다 (예외 검사, HTTP 상태 코드 설정, 최종 사용자를 해당 특정 문제에 대한 오류 페이지로 리디렉션). , 등). 이에 대한 MVC 메커니즘을 사용하지 않으려면

그러나,이 작업을 수행 할 서블릿 필터를 만들 수 있습니다 :

try/catch 블록에서 FilterChain을 실행하는 것입니다 필터 , AuthorizationException을 포착합니다. 하나를 잡으면 'unauthorizedUrl'에 302 리디렉션을 보냅니다. 그들이 이제까지 FilterChain을 호출하기 전에 제목 권한을 부여하기 때문에

시로 기존 필터가이 작업을 수행하지 않는 이유는 : 제목이 인증 기준을 충족하지 않는 경우 을 필터 체인도를 호출하지 않습니다 (따라서 더가 않습니다 catch하는 AuthorizationException).

시로에서 다른 행동을보고 싶다면 issue으로 신고하고 잠재적 인 새로운 기능으로 토론하십시오.

+0

Shiro 1.2.1에서 모든 Shiro 예외는 일반 ServletException으로 래핑됩니다. AbstractShiroFilter.doFilterInternal를 참조하십시오. 따라서 필터에서 ShiroException을 잡는 것은 작동하지 않습니다. –