【发布时间】:2013-06-10 23:39:13
【问题描述】:
我有一个 RESTful 服务使用预验证令牌进行身份验证的情况。我已经实现了自己的 preAuth 过滤器,效果很好。我的问题是发送到我的服务的一些请求包括不适合我的应用程序的 BasicAuthorization。 (我希望他们不这样做,他们不应该这样做,但他们这样做了,我无法控制。)
现在,Spring Security 似乎自动制作了一个 BasicAuthorization 过滤器,但该过滤器正在捕获这些不相关的身份验证标头,然后抛出错误:
Error 401 No AuthenticationProvider found for org.springframework.security.authentication.UsernamePasswordAuthenticationToken
所以我想关闭我在 Spring Security 中没有使用的过滤器,但我不知道怎么做。我知道我可以创建虚拟过滤器并替换自动过滤器,或者我可以在应用程序进入过滤器链之前删除所有基本的 Auth 标头,但这两者看起来都像黑客。
当我查看 spring 安全过滤器文档时,我发现了 the part that shows you how to add a FilterChainProxy,但似乎我必须以这种方式手动创建所有用于 spring 安全的 bean。具体来说,我到了需要 AccessDecisionManager 的部分,但我认为这就是我的
<http use-expressions="true" create-session="stateless"
authentication-manager-ref="authenticationManager">
<intercept-url pattern=[etc ...]
东西是为了,我仍然想使用它。有人有什么建议吗?
【问题讨论】:
-
Spring 安全配置的其余部分看起来像这里的 Siteminder 示例配置吗? static.springsource.org/spring-security/site/docs/3.0.x/…
-
实际上,我没有在
元素中看到 行...希望添加这将使您的过滤器得到首先调用。 -
@samlewis 这实际上不是没有首先调用预授权过滤器的问题。这是一个不需要身份验证的方法的问题,它尝试使用 HttpBasicAuth auth 标头进行身份验证,并且抛出异常,即使我不希望对该方法进行身份验证。另一种解决方案是将特定请求设置为
security:none(或者无论如何),然后按顺序将我的预授权过滤器放在基本过滤器的前面,但这听起来有点像黑客我。 -
这很奇怪......我认为如果你没有
<http auto-config="true">,BasicAuthenticationFilter 就没有注册。你的例子准确吗? -
查看了一段时间后,发现我的示例不完整。我正在使用 baeldung's spring security with a REST service guide 并愚蠢地包含
<http-basic />。所以......对不起这个不好的问题。
标签: java spring spring-security