2014-02-11 81 views
1

我們有2個不同的web應用程序在同一個tomcat上運行。Spring MVC - 2個不同的Web應用程序試圖互相交互(安全)

webapp#1,webapp#2。

this.restTemplate.postForObject(url, 
           request, 
           responseType); 

web應用程序#2接收在下列的控制器此請求:

的webapp#1經由該服務方法連接到web應用程序#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中創建一個新的會話?如果是的話憑證從哪裏來?我們是否應該達成一致意見? 春季安全有沒有辦法解決這個問題?

謝謝!

回答

2

我,如果有人能告訴我,如果有在同一容器的webapps一個特殊的(和好)的方式,但據我所知,這些都是選擇快樂:

選項1:無視他們在相同的雄貓

換句話說,像兩個webapps在兩個不同的位置。例如,您可以使用HTTP Basic authentication;在客戶端(webapp#1)添加RestTemplate的授權頭並且Spring Security在服務器端(webapp#2)內置支持來處理它的情況下執行ClientHttpRequestFactory相當容易。使用基本身份驗證,通信可以是無狀態的,並且不需要會話。唯一的缺點是兩個網絡應用程序都需要知道憑據。

選擇2:檢查本地主機

的想法是,在Web應用程序#2檢查在請求的來源。將ServletRequest.getRemoteAddr()與127.0.0.1(或任何其他環回地址)進行比較。如果你想應用Spring Security,你需要在安全鏈中創建一個自定義過濾器。優點:webapp#1不需要任何憑據。缺點:根據您的服務器設置,這可能是不安全的!如果用戶可以打開機器上的連接,它可以假裝爲webapp#1。如果機器上有某種代理,請格外小心。