2012-08-08 6 views
8

I Shiro Annotationen verwenden verwenden für die Autorisierung wie folgt zu überprüfen:Shiro: Handhabung geworfen Ausnahmen von Anmerkungen

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

Meine Frage lautet: Wenn der Benutzer keine Berechtigungen, wie durch die Anmerkung erforderlich, ein Ausnahme wird ausgelöst. Ich möchte lieber Benutzer auf eine andere URL im Falle einer Ausnahme umleiten. Wie mache ich das?

Hier ist meine shiro Filterkonfiguration:

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

Antwort

1

Es sieht aus wie Sie Frühling verwenden. Ich habe dies in SpringMVC behandelt, indem ich einen ExceptionHandler im Controller zur Verfügung gestellt habe.

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

Ohne Spring MVC können Sie auch ExceptionMapper verwenden:

@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

Add-Konfiguration im Frühjahr 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>