休息服务通过泉水

时间:2013-01-30 01:34:10

标签: spring model-view-controller rest

我已经构建了spring应用程序,我有一个要求使用休息服务,并且由于某些安全性而只是通过我的spring应用程序公开它

,对于我消耗的其他服务,我提供的安全凭证只有我的应用程序应该知道并通过我的spring应用程序公开相同的服务。

我可以为每个使用相应身份验证的休息服务编写包装器休息服务,并公开这些可以使用我的spring应用程序验证身份验证的包装器服务

但是,我正在做的很多工作是使用webservice并使用一些auth映射公开它。在春天,可以选择通过其他服务

1 个答案:

答案 0 :(得分:3)

为什么不为每个HTTP请求类型公开REST服务,并根据路径中的信息对其进行路由?例如(未经测试,可能不会按原样运行,但是你得到了基本的想法):

@Autowired
RestTemplate restTemplate;

@Value("${rest.proxy.target.base.url}")
String targetBaseUrl;

@RequestMapping(value = "/restProxy/{restUrlPath}", method = RequestMethod.GET)
public @ResponseBody String restProxyGet(@PathVariable("restUrlPath") String restUrlPath) {
    return restTemplate.getForObject(targetBaseUrl+ "/" + restUrlPath, String.class);
}

@RequestMapping(value = "/restProxy/{restUrlPath}", method = RequestMethod.POST)
public @ResponseBody String restProxyPost(@PathVariable("restUrlPath") String restUrlPath, @RequestBody String body) {
    return restTemplate.postForObject(targetBaseUrl + "/" + restUrlPath, body, String.class);
}

//Can also add additional methods for PUT, DELETE, etc. if desired

如果您需要与不同的主机通信,您只需添加另一个路径变量,该变量充当存储不同目标基本URL的映射的键。您可以从控制器添加所需的任何身份验证,也可以通过Spring Security中的自定义身份验证添加。

你的问题在细节上有点亮,所以你的具体情况可能会使事情复杂化,但基本方法应该有效。