8

私は Shiro アノテーションを使用して、次のような承認を確認しています。

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

私の質問は次のとおりです。ユーザーが注釈で必要な権限を持っていない場合、例外がスローされます。例外が発生した場合に、ユーザーを別の URL にリダイレクトしたいと考えています。それ、どうやったら出来るの?

これが私の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>
4

3 に答える 3

1

Springを使っているようです。コントローラーに ExceptionHandler を提供することで、SpringMVC でこれを処理しました。

    @ExceptionHandler(TheSpecificException.class)
    protected ModelAndView handleSpecificException(ApplicationException e, HttpServletRequest request)
    {
       // code to handle view/redirect here
    }
于 2012-09-18T14:40:00.117 に答える
1

Spring MVC がなくても、ExceptionMapper を使用できます。

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

}
于 2012-12-02T13:07:46.947 に答える
0

spring-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>
于 2012-12-19T15:40:29.107 に答える