【问题标题】:How to invoke a Spring Controller from Java Filter如何从 Java 过滤器调用 Spring 控制器
【发布时间】:2023-03-26 06:31:01
【问题描述】:

这是我的场景:我有两个应用程序,都使用 Spring MVC。我在其中一个中有一个 Filter 类,在另一个中有一个 Controller 类。要求有点奇怪,当向包含过滤器的应用程序发出请求时,此过滤器应调用另一个应用程序中的控制器以“保持活动”会话,因此我需要从过滤器类调用控制器类并传递为参数 JSESSIONID。有什么建议吗?

谢谢!

【问题讨论】:

  • 您希望一个 Web 应用程序中的过滤器调用另一个 Web 应用程序中的控制器?
  • 我认为您需要提供更多关于您想要达到的目标的信息,因为您的方法可能不是最合适的。您正在尝试弥合两个不同的差距:(1) 过滤器和 servlet/控制器并不意味着直接通信 (2) Web 容器中的 Web 应用程序通常是隔离的(通过单独的类加载器),因此交互需要特殊的部署。我有一种强烈的感觉,你真的不想去那里......
  • 有什么要求?

标签: java spring spring-mvc model-view-controller


【解决方案1】:

最后,我使用AsyncRestTemplate 实现了我的目标,从过滤器对控制器的调用是这样的:

        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.add("Cookie", "JSESSIONID=" + sessionId);

        HttpEntity<String> httpEntity = new HttpEntity<String>(null, httpHeaders);

        String controllerUrl = CONTROLLER_URL;
        ListenableFuture<ResponseEntity<String>> responseEntityListenableFuture = restTemplate.exchange(controllerUrl, HttpMethod.GET, httpEntity, String.class);

        responseEntityListenableFuture.addCallback(new ListenableFutureCallback<ResponseEntity<String>>() {
            @Override
            public void onSuccess(ResponseEntity<String> stringResponseEntity) {
                // Nothing to do
            }

            @Override
            public void onFailure(Throwable throwable) {
                // Handle your error
            }
        });

【讨论】:

    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    相关资源
    最近更新 更多