2012-08-08 10 views
8

मैं इस तरह प्राधिकरण के लिए जाँच करने के लिए Shiro टिप्पणियों का उपयोग करने का उपयोग कर रहा द्वारा फेंका अपवाद:, उपयोगकर्ता अनुमति नहीं है, तो के रूप में एनोटेशन के लिए आवश्यक एक:Shiro: हैंडलिंग एनोटेशन

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

मेरा प्रश्न यह है अपवाद फेंक दिया जा रहा है। अपवाद के मामले में मैं उपयोगकर्ता को एक अलग यूआरएल पर रीडायरेक्ट करना चाहता हूं। मैं उसको कैसे करू?

यहाँ मेरी Shiro फिल्टर विन्यास है:

<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

ऐसा लगता है कि वसंत का उपयोग कर रहे हैं। मैंने इसे नियंत्रक में एक अपवाद हैंडलर प्रदान करके स्प्रिंगएमवीसी में संभाला। वसंत-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 
    }