Spring MVC – 试图互相交互的2个不同的Web应用程序(安全性)
我们有2个不同的Web应用程序在同一个tomcat上运行。
webapp#1,webapp#2。
Webapp#1通过此服务方法连接到webapp#2:
this.restTemplate.postForObject(url, request, responseType);
webapp#2正在以下控制器中接收此请求:
@RequestMapping(value = "/bla", method = RequestMethod.POST) @ResponseStatus(value = HttpStatus.OK) @ResponseBody public ResponseDTO requestSomething(@RequestBody RequestDTO requestDTO, HttpServletRequest request) { return new ResponseDTO("Hello"); }
现在,我们有一个安全要求,即我们在webapp#2中显示的这个控制器只接收来自webapp#1的请求。
实现这一目标有哪些替代方案? 我们是否必须从webapp#1在webapp#2中创建一个新会话? 如果是这样,凭证来自哪里? 我们应该就预定义的东西达成一 春季安全有没有办法解决这个问题?
谢谢!
如果有人能告诉我在同一个容器中是否有特殊(和好)的webapps方式,我很高兴,但AFAIK这些是选项:
选项1:忽略它们在同一个Tomcat中
换句话说,就像两个webapps位于两个不同的位置。 例如,您可以使用HTTP Basic身份validation ; ClientHttpRequestFactory
实现在客户端(webapp#1)添加ClientHttpRequestFactory
的Authorization标头并且Spring Security内置支持在服务器端(webapp#2)处理它是相当容易的。 使用基本身份validation,通信可以是无状态的,不需要会话。 唯一的缺点是两个Web应用程序都需要知道凭据。
选项2:检查localhost
想法是在webapp#2中检查请求的来源。 将ServletRequest.getRemoteAddr()
与127.0.0.1(或任何其他环回地址)进行比较。 如果要应用Spring Security,则需要在安全链中创建自定义filter。 优势:webapp#1不需要任何凭据。 缺点:根据您的服务器设置,这可能是不安全的! 如果用户可以打开计算机上的连接,则可以假装为webapp#1。 如果机器上有某种代理,请格外小心。