【问题标题】:Public & Private REST APIs with Spring Security具有 Spring Security 的公共和私有 REST API
【发布时间】:2014-02-03 20:50:46
【问题描述】:

我有一个用 Spring 3.2 编写的 REST Web 服务,它通过 Spring Security 使用 CAS 进行保护,我希望它提供一个相同的私有内部 API,可以由我们专用网络上的其他服务器使用而无需身份验证.

例如,/app/public/people/{id} 和 /app/private/people/{id} 这两个端点都将映射到同一个处理程序,但后者会绕过安全性,而前者需要 CAS 身份验证。

我可以将两者都放在同一个@RequestMapping 注释中并指定不同的安全拦截吗?例如,

安全拦截:

    <security:intercept-url pattern="/private/**" access="permitAll() />
    <security:intercept-url pattern="/public/**" access="isAuthenticated()" requires-channel="https"/>

请求映射:
@RequestMapping(value={"/public/people/{id}", "/private/people/{id}"})

【问题讨论】:

    标签: spring rest spring-mvc spring-security


    【解决方案1】:

    如何使用IP地址来区分来自私有网络和公共网络的访问?然后,您可以只为两者定义一个端点。例如,如果你的私网是 192.168.1.0/24,那么:

    <security:intercept-url pattern="/**"
              access="isAuthenticated() or hasIpAddress('192.168.1.0/24')"
              requires-channel="https" />
    

    如果您在反向代理后面有 Servlet 容器,请不要忘记设置 X-Forwarded-For(或 X-Real-IP)标头并配置您的容器以使用它;否则 Spring Security 将看到反向代理的 IP,而不是客户端。

    【讨论】:

      猜你喜欢
      • 2017-01-04
      • 2016-07-07
      • 2014-08-31
      • 2017-06-27
      • 1970-01-01
      • 2020-08-09
      • 2018-08-18
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多