我有一个用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}"})
答案 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,而不是客户端。