簡體   English   中英

通過zuul訪問時在請求之間重置Spring Session作用域bean

[英]Spring session scope bean reset between requests when accessing through zuul

Spring應用程序具有一個會話bean,其中包含某些數據。 該數據是在init請求時從DB加載到控制器的,這始終是客戶端在啟動時調用的第一個請求。 該數據用於同一用戶的其他請求。 現在,一切都可以正常工作。 但是,在嘗試使用zuul將應用程序集成到系統中之后(據我所知,它只是將請求從一個url重定向到另一個url),但它失敗了。 每當在init之后調用方法時,會話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發生。 即如果我使用localhost:30022 / rest / ...,它可以工作,如果我使用localhost:8080 / app / tasks / rest / ...(zuul重定向到localhost:30022 / rest / ...),我得到NPE ,因為在初始化請求之后,緩存bean會丟失其數據。

這可能是由於Zuul的默認行為所致,該行為阻止了與Cookie相關的標頭的傳遞。

以下是Zuul的默認配置,不允許將以下標頭傳遞給下游API服務器。

zuul.sensitiveHeaders= Authorization,Cookie,Set-Cookie

因此,請嘗試定義以下屬性。 它將允許您所有與Cookie相關的標頭都傳遞到您的API服務器。

zuul.sensitiveHeaders= Authorization

您可以在本文檔的 “ Cookies和敏感標題”部分中找到更多詳細信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM