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。 如果机器上有某种代理,请格外小心。