2017-06-28 5 views
0

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リクエスト後にデータを失うためです。

+0

のセクション「クッキーと敏感ヘッダ」で詳細を見つけることができますか?クッキー? – Leffchik

+0

私は明示的に何も指定していません(スプリングブートの魔法) –

答えて

1

これは、Cookie関連のヘッダーのパススルーを防止するZuulのデフォルト動作によって引き起こされる可能性があります。

以下はZuulのデフォルト設定であり、下位APIサーバーへの下位ヘッダーの受け渡しを許可していません。

zuul.sensitiveHeaders= Authorization,Cookie,Set-Cookie 

以下のプロパティを定義してください。すべてのCookie関連のヘッダーをAPIサーバーに渡すことができます。

zuul.sensitiveHeaders= Authorization 

あなたは、ユーザーのセッションを追跡するために使用している何this document

関連する問題