【问题标题】:How to unsecure /** URL pattern in spring-security如何在 spring-security 中解除 /** URL 模式的安全
【发布时间】:2011-09-07 03:40:24
【问题描述】:

我正在尝试取消 /** 模式的安全性,但到目前为止我所有的尝试都是徒劳的。

这就是我正在做的:

<security:intercept-url pattern="/**" filters="none" />

我的配置不再包含intercept-url 定义。

但是在访问任何 URL 后,我仍然会被重定向到默认入口点...

我调试了 spring 安全源,我实际上可以看到为我尝试访问的 URL 加载的过滤器。 (FilterChainProxy line: 154,filters 列表已满)

非常感谢您了解为什么会发生这种情况以及如何解除 /** 的安全。

我正在使用 3.0.5.RELEASE


编辑:

安全配置:

 <security:http auto-config="false" use-expressions="true" entry-point-ref="loginUrlAuthenticationEntryPoint">
    <!-- dev --><security:intercept-url pattern="/**" filters="none" />

    <security:custom-filter position="FORM_LOGIN_FILTER" ref="absoluteUrlSsoFilter" />
</security:http>

<security:authentication-manager>
    <security:authentication-provider user-service-ref="ssoDetailsService" />
</security:authentication-manager>

这是相关部分,我也可以给你bean定义,但我怀疑问题是否存在。

【问题讨论】:

  • 你能发布完整的 spring 安全配置吗?
  • 如果您还没有这样做,请将日志级别设置为 DEBUG 并查看日志输出。应该有一个非常明确的指示,您何时以及为什么被重定向到登录页面。请回复此附加详细信息,您应该能够得到一些有意义的回复。
  • @Peter 我有,是的,调试日志说类似于“候选人是:'/resource.html',模式是:'/**',匹配:true”,然后打印过滤器链将执行。我明天会发布确切的日志,因为我目前没有。实际上日志应该说“候选是:'/resource.html',模式是:'/**',匹配:true”然后“/**有一个空的过滤器列表”,就像它对除/以外的所有模式一样**
  • 只是好奇你是否解决了这个问题?
  • @Peter 很好地证明了 /** 上的 filters="none" 在 3.0 上不起作用,由于多个 元素,它在 3.1 中是可能的。这里有更多信息forum.springsource.org/…**-URL-pattern-with-filters-quot-none-quot,这里还有更多jira.springsource.org/browse/SEC-1758,无论如何你不需要这个工作,因为你可以使用IS_AUTHENTICATED_ANONYMOUSLY

标签: java spring jboss spring-security


【解决方案1】:

如果你想一开始就完全关闭,为什么要配置 Spring Security?

如果你在开发模式下关闭它,为什么不把它放在单独的 XML 中,而不是在 id dev 模式时加载这个单个文件并在 web.xml 中注释 springSecurityFilterChain? (第二个你可以用Maven资源处理)。

或者在 /** 匹配器之前尝试一些虚拟条目:

<security:intercept-url pattern="/dummy" access="IS_AUTHENTICATED_FULLY" />
<security:intercept-url pattern="/**" filters="none" />

仍然不明白为什么您需要完全配置并同时关闭安全性?

【讨论】:

  • 我发布的配置是删除所有其他intercept-url定义后的结果配置。我不想完全关闭它,我不知道你从哪里得到这个想法:) 但是我确实希望我的应用程序的大部分是不安全的,我想明确添加安全 URL,因为它们很多少于安全的。保护 /** 并显式添加不安全的 URL 会导致更大的安全配置。
  • 我不明白添加 将如何帮助我理解为什么 不起作用。
【解决方案2】:

至少在 grails 中,您可以将安全设置设置为 IS_AUTHENTICATED_ANONYMOUSLY。由于 grails spring security 插件基于 spring security,我敢打赌这会起作用。

无需使用过滤器或任何东西。

【讨论】:

  • 会试一试,但如果这可行并且 filters="none" 看起来不像是一个错误。我的意思是如果说 filters="none" 它不应该为匹配的 URL 加载任何过滤器吗?
  • @simeon 这里有一个例子ikennaokpala.wordpress.com/2010/05/21/…
  • 有效,但我仍然徘徊为什么 filters="none" 没有。这看起来像一个错误。
  • @simeon,确保你把它放在你的定义中,否则你的整个网站将被匿名验证。 spring security 使用第一个匹配的 url 映射,所以把最详细的映射放在第一位。
  • 是的,如果你在 /** 模式之后有拦截 URL 定义,实际上 spring 会警告你。
猜你喜欢
  • 2014-05-11
  • 2012-03-03
  • 2022-10-19
  • 2015-05-11
  • 1970-01-01
  • 2014-10-18
  • 2011-04-12
  • 1970-01-01
  • 2017-11-29
相关资源
最近更新 更多