Eu tenho construir uma aplicação web usando Spring framework MVC para publicar serviços REST. Por exemplo:
@Controller
@RequestMapping(/movie)
public class MovieController {
@RequestMapping(value = /{id}, method = RequestMethod.GET)
public @ResponseBody Movie getMovie(@PathVariable String id, @RequestBody user) {
return dataProvider.getMovieById(user,id);
}
Agora eu preciso para implantar o meu aplicativo, mas eu tenho o seguinte problema: Os clientes não têm acesso directo ao computador no qual reside o aplicativo (Há um firewall). Portanto eu preciso de uma camada de redirecionamento em uma máquina proxy (acessíveis pelos clientes) que chama o serviço descanso efectivo.
Eu tentei fazer uma nova chamada usando RestTemplate: Por exemplo:
@Controller
@RequestMapping(/movieProxy)
public class MovieProxyController {
private String address= http://xxx.xxx.xxx.xxx:xx/MyApp;
@RequestMapping(value = /{id}, method = RequestMethod.GET)
public @ResponseBody Movie getMovie(@PathVariable String id,@RequestBody user,final HttpServletResponse response,final HttpServletRequest request) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
RestTemplate restTemplate = new RestTemplate();
return restTemplate.exchange( address+ request.getPathInfo(), request.getMethod(), new HttpEntity<T>(user, headers), Movie.class);
}
Este é ok, mas eu preciso reescrever cada método no controlador para usar o resttemplate. Além disso, isso faz com que redundante serialização / desserialização na máquina proxy.
Eu tentei escrever uma função genérica usando restemplate, mas não deu certo:
@Controller
@RequestMapping(/movieProxy)
public class MovieProxyController {
private String address= http://xxx.xxx.xxx.xxx:xx/MyApp;
@RequestMapping(value = /**)
public ? redirect(final HttpServletResponse response,final HttpServletRequest request) {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
RestTemplate restTemplate = new RestTemplate();
return restTemplate.exchange( address+ request.getPathInfo(), request.getMethod(), ? , ?);
}
Eu não poderia encontrar um método de resttemplate que trabalha com solicitação e resposta objetos.
Eu também tentei redirecionamento primavera e para a frente. Mas redirecionar não alterar o endereço IP do cliente do pedido, então eu acho que é inútil neste caso. Eu não poderia avançar para uma outra URL também.
Existe uma maneira mais adequada para conseguir isso? Desde já, obrigado.













