【问题标题】:How to Disable Spring Security Filters如何禁用 Spring 安全过滤器
【发布时间】: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(或者无论如何),然后按顺序将我的预授权过滤器放在基本过滤器的前面,但这听起来有点像黑客我。
  • 这很奇怪......我认为如果你没有&lt;http auto-config="true"&gt;,BasicAuthenticationFilter 就没有注册。你的例子准确吗?
  • 查看了一段时间后,发现我的示例不完整。我正在使用 baeldung's spring security with a REST service guide 并愚蠢地包含 &lt;http-basic /&gt; 。所以......对不起这个不好的问题。

标签: java spring spring-security


【解决方案1】:

查看了一段时间后,发现我的示例不完整。我将 baeldung 的 spring security 与 REST 服务指南一起使用,并愚蠢地包含了 &lt;http-basic /&gt;。所以...对不起这个不好的问题。

【讨论】:

    猜你喜欢
    • 2015-04-01
    • 2016-05-07
    • 2020-12-05
    • 2018-06-11
    • 2023-02-04
    • 2014-01-15
    • 2014-02-02
    • 2015-05-24
    • 2022-01-18
    相关资源
    最近更新 更多