如果没有匹配的spring security <intercept-url>?</intercept-url>,如何处理请求

时间:2013-09-11 00:34:37

标签: spring spring-security

我正在使用spring 3.1.1和spring security 3.1.0。我想强制执行一项策略,即以特定方式处理未使用<intercept-url pattern="..." access="..."/>条目显式配置的所有http请求。对于与已配置的<intercept-url/>匹配的请求,我希望使用典型的基于角色的访问决策。但是,对于不匹配的请求,我想要回复404(未找到)(或者可能是403 /禁止)。我想这样做,以便我和其他团队成员被迫为任何新端点明确配置spring安全性和相关角色。

我原本以为我可以使用<intercept-url pattern="/**" access="denyAll"/>作为最后intercept-url,那个春天会做我想要的。如果用户已经过身份验证,但对于未经身份验证的/匿名用户来说有点奇怪,则此方法有效。对于匿名用户,spring会检测(ExceptionTranslationFilter)用户是匿名用户,并在处理/missingResource之类的请求时启动身份验证过程。通常,这意味着用户被重定向到登录表单,并在登录后重定向回/missingResource。因此,用户必须登录才能看到404(未找到)页面。

我最终删除了intercept-url pattern="/**" access="denyAll"/>并编写了一个运行after="FILTER_SECURITY_INTERCEPTOR"的自定义过滤器,并针对FilterSecurityInterceptor未匹配的请求以404响应,但这看起来有点复杂。有更好或更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

你可以使用access =“denyAll”为截取url / **定义一个单独的http元素,并添加一个自定义入口点ref以避免spring将用户重定向到登录表单,你可以使用现有的entryPoint Http403ForbiddenEntryPoint来显示403错误响应或通过实现AuthenticationEntryPoint实现您自己的。

希望它有所帮助。