2016-12-14 18 views
0

AutoWired HttpSessionの使用に関する問題:autowired HttpSessionが作成されると、Spring MVCが作成されますか?

LoginControllerは、HttpServletRequestをパラメータとして渡すLoginServiceを呼び出します。私はいくつかの例では、ヌル受け取るrequest.getSession(false)を呼び出すことにより、セッションを取得しようとした場合、LoginServiceクラスで

@Autowired 
private HttpSession httpSession; 

私はいくつかの他の注釈付きクラス(ただしLoginServiceなど)でこのようautowiredのHttpSessionをしました。

私がrequest.getSession(true)を呼び出すことによってセッションを取得しようとすると、2つのHttpSessionオブジェクト(1つはここに、もう1つは自動配線)で終わります。

私はLoginServicクラスでHttpSessionをオートワイヤリングし、そこからセッションを使用すると、2つのHttpSessionオブジェクトで終了します。

正確にautowired HttpSessionが作成されるのはいつですか?この状況を処理する最善の方法は何ですか?

ありがとうございます!

+0

ようこそスタックオーバーフロー!良い質問をするので、良い答えを得るためにあなたを助けるために私たちの[SO質問チェックリスト](http://meta.stackoverflow.com/questions/260648/stack-overflow-question-checklist)を確認してください。 –

+0

あなたが尋ねていることは非常に不明ですが、*最良の方法は、Spring Securityを使用し、セキュリティコードを自分で書くことではありません。 – chrylis

+0

私たちのプロジェクトの現在のタイミングを考えれば、私はSpring Securityを使うことができません。あなたが上記の手順に従えば、あなたは私の問題を理解するでしょう。あなたが不明なことがあれば私に教えてください。私は正しいことができます。簡単に言うと、AutoWired HttpSessionがいつ作成されるのか、それをどのように使用するのかを知る必要があります。 – Swamy

答えて

1

LoginControllerは、Web Concernを管理することになっています。
LoginServiceはAuthentication Concernを管理する予定であり、Web Concernを認識していないはずです。
HttpSessionはWebドメインの関心事です。したがって、Web Concern - > LoginControllerを管理するクラスで管理する必要があります。
LoginControllerはマップされたメソッドのパラメータとしてHttpSessionを宣言し、HttpSessionから必要なものを読み書きし、LoginServiceで呼び出されるメソッドのパラメータとして渡します。
何かのように:

@Controller 
public class ApplicationController { 

@Autowired 
private LoginService loginService; 

@RequestMapping(value = "/login", method = POST) 
public void Login(HttpSession httpSession) { 
    final String myAttribute = String.valueOf(httpSession.getAttribute("myAttribute")); 
    loginService.doWhatYouNeedToDo(myAttribute); 
} 
} 
+0

私が実行している問題は次のとおりです。Loginメソッドに渡されたhttpSessionは、autowired httpSessionを呼び出し、2つの異なるhttpSessionオブジェクトを終了します。 – Swamy

+0

@Swamyあなたの問題を修正しましたか?私は同じ問題を抱えています!私のhttpsessionは私のログインプロセスと私の残りの呼び出しとでは異なります –

関連する問題