2012-08-08 2 views
8

에 의해 throw 예외 처리 :시로 :이 같은 권한을 확인하기 위해 시로 주석을 사용하여 사용하고 주석

@RequiresPermissions("addresses:list") 
    public ModelAndView getCarrierListPage() { 
     return new ModelAndView("addressList", "viewData", viewData); 
    } 

내 질문은 이것이다 : 주석에 의해 필요에 따라 사용자가 권한이없는 경우,이 예외가 발생합니다. 나는 오히려 예외의 경우 사용자를 다른 URL로 리디렉션하려고합니다. 어떻게해야합니까? 당신이 Spring을 사용하는 것처럼

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> 
    <property name="securityManager" ref="securityManager"/> 
    <property name="loginUrl" value="/showLoginPage"/> 
    <property name="filterChainDefinitions"> 
    </property> 
</bean> 

답변

1

것 같습니다 :

여기 내 시로 필터 구성입니다. 나는 컨트롤러에서 ExceptionHandler를 제공함으로써 SpringMVC에서 이것을 처리했다. 봄-servlet.xml 파일에

@Provider 
@Component 
public class GenericExceptionMapper implements ExceptionMapper<ShiroException> { 

    @Override 
    public Response toResponse(final ShiroException ex) { 
     return Response.status(ex instanceof UnauthenticatedException ? Response.Status.UNAUTHORIZED : Response.Status.FORBIDDEN) 
       .entity(ex.getMessage()) 
       .type(MediaType.TEXT_PLAIN_TYPE) 
       .build(); 
    } 

} 
1

스프링 MVC없이 당신은 또한 ExceptionMapper을 사용할 수 있습니다

<beans:bean 
    class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 
    <beans:property name="exceptionMappings"> 
     <beans:props> 
      <beans:prop key="org.apache.shiro.authz.UnauthorizedException">/403</beans:prop> 
      <beans:prop key="org.apache.shiro.authz.AuthorizationException">/login</beans:prop> 
     </beans:props> 
    </beans:property> 
</beans:bean> 
0

추가 구성 :

@ExceptionHandler(TheSpecificException.class) 
    protected ModelAndView handleSpecificException(ApplicationException e, HttpServletRequest request) 
    { 
     // code to handle view/redirect here 
    }