【问题标题】:Spring security: Adding a new ROLE which supports authentication by IPSpring security:添加一个支持 IP 身份验证的新角色
【发布时间】:2011-07-15 16:09:18
【问题描述】:

我是 Spring Security 的新用户。

我之前将 Spring Security 配置为为我的 Web 应用程序执行基于表单的身份验证。

我使用注释来指示哪些控制器/方法需要 ROLE_USER 和匿名,并实现了我自己的 daoAuthenticationProvider 来执行身份验证。

现在正在实施 REST 服务,这些服务需要在 BasicAuthentication 上进行身份验证 + 对我的数据库进行 IP 验证。

所以我在 REST 服务控制器上定义了一个新角色 ROLE_IP_AUTH。

此时我有点不知所措。有人可以简要说明我应该采取的下一步措施吗?

  • 我需要创建一个新的 新的 元素 角色?
  • 我应该切换到这个 过滤链代理?如果是这样,什么过滤器 我应该包括吗?
  • 我应该在现有的 daoAuthenticationProvider 类中处理这个问题吗?

基本上我只需要知道我要去的方向。我想我知道的足够多,似乎只有 5 种不同的方式可以到达春天的任何地方。


其他信息 我当前的实现具有如下配置的元素:
<security:http auto-config="false"
               entry-point-ref="authenticationEntryPoint" >
    <security:logout logout-url="/logout" />
    <security:anonymous enabled="false"/>
    <security:custom-filter position="FORM_LOGIN_FILTER" ref="usernamePasswordAuthenticationFilter" />
    <security:custom-filter position="ANONYMOUS_FILTER" ref="anonymousAuthFilter" />
</security:http>

我剩下的问题是如何实现自己的 IP 验证。我可以使用自定义过滤器添加 BasicAuth 过滤器并实现我自己的基本身份验证过滤器来检查 IP。但我不清楚如何使该过滤器仅适用于我的 REST 服务使用的 ROLE_IP_AUTH?

【问题讨论】:

    标签: java spring-security


    【解决方案1】:

    @Ritesh 的回答非常有助于以不同的方式重新构建这个任务。另一个解决这个问题的好帖子在这里:

    Spring security - how to mention both form based and basic authentication

    最终我的理解是:按照@Ritesh 在 3.0.x 中的建议通过选民来做,或者使用多个 元素,如讨论的 3.1.0.RC1(截至 17mar2011 的版本)中现在可用的元素在上面的链接中。

    【讨论】:

      【解决方案2】:

      您可以将 http-basic 添加到您的元素中。

      <sec:http-basic/>
      

      还要添加 create-session="never",因为您不会为 REST 服务添加会话。茂你的服务到一个特殊的 url 模式会很有帮助。

      <sec:intercept-url pattern="/service/**" access="ROLE_IP_AUTH" />
      

      【讨论】:

      • 我添加了一些额外的澄清信息。我仍然有点模糊理解我如何将 BasicAuth 过滤器中验证的 ROLE_IP_AUTH 与表单过滤器中的 ROLE_USER 分离,以及如果我没有在某处定义它,spring 将如何知道使用哪一个。
      • 您可以添加自定义AuthenticationProvider 以根据身份验证添加角色,或者如果您想使用登录但想使用不同的角色,您可以使用自定义SessionAuthenticationStrategy 来更改登录后的角色基于ServletPath。
      • @David Parks Philipp Hügelmeyer 的回答似乎是关于提供基于 URL 的访问权限。请参阅 books.google.com/… 的 Spring Receipe(第 2 版)第 201 页。在该示例中,声明了 IP_LOCAL_HOST 角色以调用投票者,并且未将其分配给用户。如果您想将决策委托给 AccessDecionManager 而不是为用户分配新角色,那么选民解决方案将起作用。这种方法可能对您有用,您只需在 Voter 中进行验证后授予 ROLE_USER。
      • 感谢 Ritesh,这是一篇很有帮助的文章。您应该将其发布为答案。
      猜你喜欢
      • 2020-11-09
      • 2013-02-04
      • 1970-01-01
      • 2012-07-05
      • 2012-05-30
      • 2012-01-13
      • 2014-08-31
      • 2013-07-16
      • 2022-01-15
      相关资源
      最近更新 更多