公共与使用Spring Security的私有REST API

时间:2014-02-03 20:50:47

标签: spring rest spring-mvc spring-security

我有一个用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}"})

1 个答案:

答案 0 :(得分: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,而不是客户端。