2012-08-08 12 views
8

que estoy usando usando anotaciones Shiro para comprobar la autorización de esta manera:Shiro: Manejo de excepciones lanzadas por anotaciones

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

Mi pregunta es la siguiente: Si el usuario no tiene permisos como es requerido por la anotación, una se está lanzando una excepción. Me gustaría redirigir al usuario a una URL diferente en caso de una excepción. ¿Cómo puedo hacer eso?

Aquí es mi shiro configuración del filtro:

<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> 

Respuesta

1

Parece que estás utilizando la primavera. Manejé esto en SpringMVC al proporcionar un ExceptionHandler en el controlador.

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

Sin Spring MVC también se puede utilizar ExceptionMapper: configuración

@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(); 
    } 

} 
0

complemento en primavera-servlet.xml:

<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> 
Cuestiones relacionadas