2016-11-05 6 views
0

Spring@Serviceクラスにセッションオブジェクトを作成する必要があります。サービスクラスでは唯一の方法があります:Springサービスクラスでセッションを作成する方法は?

public UserDetails loadUserByUsername(String username) 
      throws UsernameNotFoundException { 

     User user=appServiceManager.getUser(username); 

loadUserByUsername方法はもう余分なパラメータを受け付けません - username除いて、それが事前に定義されたクラスで呼び出しているよう。

セッションにユーザーの詳細を保存します。

サービスクラスでセッションを取得するにはどうすればよいですか?

答えて

0

sessionオブジェクトはプレゼンテーション(ビュー)レイヤーに関連しているため、セッションオブジェクトをサービスレイヤーに渡すのではなく、コントローラー自体で処理する必要があります。

サービスレイヤの関連オブジェクトsessionまたはviewを処理すると、サービスレイヤ(ビジネスロジック)がプレゼンテーションレイヤと強く結合することになります。他のエンドポイント(コントローラ、異なるWebサービスなど)と疎結合します。

ですから、以下のようなコントローラ層自体にHttpsessionuserdetailsを追加することができます。

@Controller 
public class UserDetailsController { 

    public R method1(HttpSession session, UserDetailsBean bean) { 

    session.addAttribute("USERDETAILS", bean); 

    //you can use UserDetailsBean object anywhere until you remove from session 
    } 
} 

あなたがspring-securityを使用している場合、あなたは簡単に以下のようなあなたのコントローラでuserdetailsを取得することができます:

UserDetails userDetails = SecurityContextHolder.getContext().getAuthentication().getDetails(); 

あなたは実際に私がセキュリティアプリケーションを開発しているので、here

+0

を実際に探すことができますサービスからの呼び出しはUserDetailsS​​erviceという内部クラスによって開始されます。私はあなたの答えを受け入れますが、私はそこでセッションを維持する必要があります。 .....豆はコントローラに来ません..そこにセッションを作成する方法はありますか? – mike

+0

UserDetails userDetails = SecurityContextHolder.getContext()。getAuthentication()。getDetails(); – developer

関連する問題