2

我正在为 Spring Security 和异常处理而苦苦挣扎。

我在我的 servlet 上下文中配置了以下异常处理程序:

   <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
        <property name="defaultErrorView" value="/errors/general-error"/>
        <property name="defaultStatusCode" value="500" />
        <property name="warnLogCategory" value="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"/>
    </bean>

这会捕获任何未捕获的异常,并显示一般错误页面。

我还使用服务器上的 CAS 单点登录配置了 Spring Security。如果在我的安全配置中,我有以下内容:

<security:intercept-url pattern="/secure/**" access="hasRole('USER')" />

如果未经身份验证的用户访问“/secure”,他们会被正确重定向到登录,然后他们返回并可以查看该页面。

我更喜欢PreAuthorise()在 MVC 方法上使用注释,而不是手动定义 URL。因此,如果我有以下注释:

    @PreAuthorize("hasRole('USER')")
    @RequestMapping("/secure")
    public String displaySecurePage(
...
}

不会发生到 CAS SSO 服务器的重定向,Spring 只是显示一般错误页面,并带有异常org.springframework.security.access.AccessDeniedException: Access is denied

为什么定义访问权限的两种方式之间存在差异,以及如何使用PreAuthorise带有 Spring 的注释正确引导未经身份验证的用户登录,并且仍然有一个异常处理程序来捕获其他异常?

4

0 回答 0