2012-08-08 26 views
8

tarafından atılan Taşıma İstisnalar:Shiro: Böyle yetki kontrol etmek için Shiro ek açıklamaları kullanarak kullanıyorum ek açıklamalar

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

Sorum şudur: ek açıklama gereği kullanıcı izinlerine sahip değilse, bir istisna atılıyor. Bir istisna durumunda kullanıcıyı farklı bir URL'ye yönlendirmeyi tercih ederim. Bunu nasıl yaparım? Eğer Bahar kullanarak konum gibi

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

cevap

1

görünüyor:

İşte benim shiro'yu filtre yapılandırmasıdır. Bunu kontrol cihazında bir ExceptionHandler sağlayarak SpringMVC'de ele aldım. yay servlet.xml içinde

@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

Bahar MVC olmadan da ExceptionMapper kullanabilirsiniz

<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

eklenti yapılandırmasını:

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