Springアプリケーションには、特定のデータを含むセッションBeanがあります。そのデータはコントローラからの要求であるinit
でDBからロードされます。これは常に起動時にクライアントが最初に要求するものです。そのデータは、同じユーザーによる他の要求に使用されます。今、すべてがうまく動作します。しかし、zuulを使ってシステムにアプリケーションを統合しようとすると(これは私がこの文脈で理解する限り、あるURLから別のURLへリクエストをリダイレクトするだけです)、それは壊れました。 init
の後にメソッドが呼び出されると、セッションBeanのデータはnull
になります。ここでzuulを使用してアクセスするときのリクエスト間のSpringセッションスコープBeanのリセット
は、サービスクラスからの抜粋です:
@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/...にリダイレクトされます)キャッシュBeanはinitリクエスト後にデータを失うためです。
のセクション「クッキーと敏感ヘッダ」で詳細を見つけることができますか?クッキー? – Leffchik
私は明示的に何も指定していません(スプリングブートの魔法) –