我正在努力应对Spring Security和异常处理。
我在servlet-context中配置了以下异常处理程序:
<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”,则会将其正确重定向到登录状态,然后返回并查看该页面。
我更喜欢在MVC方法上使用PreAuthorise()
注释,而不必手动定义URL。相反,如果我有以下注释:
@PreAuthorize("hasRole('USER')")
@RequestMapping("/secure")
public String displaySecurePage(
...
}
没有发生重定向到CAS SSO服务器,Spring只显示常规错误页面,异常org.springframework.security.access.AccessDeniedException: Access is denied
为什么定义访问权限的两种方式之间存在差异,如何在Spring中使用PreAuthorise
注释正确指导未经身份验证的用户登录,和仍然具有一个异常处理程序来捕获其他异常?