spring mvc reste un service de redirection / avant / proxy

J'ai créer une application web à l'aide de spring mvc cadre de publier des services REST.
Par exemple:

@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);

}

Maintenant, j'ai besoin de déployer mon application mais j'ai le problème suivant:
Les clients n'ont pas d'accès direct à l'ordinateur sur lequel réside l'application (Il y a un pare-feu). Donc j'ai besoin d'une redirection couche sur un ordinateur proxy (accessible par les clients) qui appelle le réel reste du service.

J'ai essayé de faire un nouvel appel à l'aide de RestTemplate:
Par Exemple:

@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);

}

C'est ok mais j'ai besoin de réécrire chaque méthode dans le contrôleur à utiliser le resttemplate. Aussi, cela provoque redondant de sérialisation/désérialisation sur l'ordinateur proxy.

J'ai essayé d'écrire une fonction générique à l'aide de restemplate, mais il n'a pas fonctionné:

@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(), ? , ?);

}

Je ne pouvais pas trouver une méthode de resttemplate, qui travaille avec les objets request et response.

J'ai aussi essayé de printemps rediriger vers l'avant. Mais la redirection ne change pas la demande du client adresse ip donc je pense qu'il est inutile dans ce cas. Je ne pouvais pas en avant vers une autre URL, soit.

Est-il plus approprié pour y parvenir?
Merci à l'avance.

  • Pourquoi ne pas utiliser quelque chose comme Apache w/ mod_rewrite ou mod_proxy pour ce faire? Il suffisait de mettre un serveur à l'extérieur de votre pare-feu (généralement, nous appelons cela la DMZ), et des règles de configuration dans le FW qui permet au serveur de parler à votre serveur derrière le pare-feu. C'est de cette façon que la plupart des entreprises de résoudre ce problème.
  • merci, je vais essayer de parler à sys admins si votre solution fonctionne pour notre cas. En attendant je vais utiliser resttemplate et de sérialiser/désérialiser les données json à la chaîne..
InformationsquelleAutor nilgun | 2013-02-06