java - 通过 zuul 访问时,Spring session 作用域 bean 在请求之间重置

标签 java spring javabeans netflix-zuul session-scope

Spring 应用程序有一个 session bean,其中包含某些数据。该数据在 init 请求时从数据库加载到 Controller ,这始终是客户端在启动时调用的第一个请求。该数据用于同一用户的其他请求。现在,一切都可以正常运行。然而,在尝试使用 zuul 将应用程序集成到系统中(据我所知,在这种情况下,它只是将请求从一个 URL 重定向到另一个 URL),它崩溃了。每当在 init 之后调用一个方法时, session bean 的数据就是 null

这是服务类的片段:

    @Autowired
    TaskCache cache;


    @Override
    public void initUserSession() {
        List<Task> data = loadTasks();
        cache.setTasks(data);
        LinearFilterStack<Task> fs = createFilterStack(data);
        cache.setFilterStack(fs);

        System.out.println(cache.hashCode()); //hashcode stays same
        System.out.println(cache.getFilterStack() == null) //false
    }


    @Override
    public List<Task> getTasks(Sort sort) {
        System.out.println(cache.hashCode()); //hashcode stays same
        System.out.println(cache.getFilterStack() == null) //true
        LinearFilterStack<Task> fs = cache.getFilterStack();
        List<Task> tasks = fs.filter(cache.getTasks()); //Obviously NPE
        sortTasks(tasks, sort);
        return tasks;
    }
<小时/>
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION, proxyMode=ScopedProxyMode.TARGET_CLASS)
public class TaskCache { ... }
<小时/>

再说一次,这只能通过 zuul 发生。 IE。如果我使用 localhost:30022/rest/... 它可以工作,如果我使用 localhost:8080/app/tasks/rest/... (zuul 重定向到 localhost:30022/rest/...) 我得到 NPE,因为缓存 bean 在初始化请求后丢失了数据。

最佳答案

这可能是由 Zuul 的默认行为导致的,该行为阻止传递 cookie 相关 header 。

以下是 Zuul 的默认配置,它不允许将以下 header 传递到下游 API 服务器。

zuul.sensitiveHeaders= Authorization,Cookie,Set-Cookie

所以请尝试定义以下属性。它将允许您将所有 cookie 相关 header 传递到您的 API 服务器。

zuul.sensitiveHeaders= Authorization

您可以在 this document 的“Cookie 和敏感 header ”部分找到更多详细信息

关于java - 通过 zuul 访问时,Spring session 作用域 bean 在请求之间重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44801671/

相关文章:

java - 如何使用java中的另一个堆栈反转堆栈

java - 在终端中编译/运行 Java 文件

java - 什么是非可视 bean?

Java 方法命名约定

接口(interface)、EJB 和 Servlet 中的 Javadoc

java - 为什么 RSA 使用相同的 key 和消息会产生不同的结果?

java - 为我正在创建的 GUI 中的 JMenuItem "Copy"提供低级功能

java - Angular 不通过 RESTful API 从 Spring 获取

css - 无法在 Spring MVC 应用程序中从 CSS 访问图像文件

java - 在 JSF bean 之间传递数据