2017-08-20 19 views
0

SAMLとIS WO2サーバが動作しているサーブレットがあります。ログイン後、システムはLDAPからユーザーデータを取得します。このライブラリは、JSF(Faces Context)を使用してアプリケーション用に作成されました。SSOを使用したJavaログイン

getUserId()、getUserEmail()などの静的メソッドを使用してアプリケーションにユーザーデータを提供するLoginUtilというクラスがあります。このメソッドのそれぞれは、Faces Context経由でHTTPセッションを取得して、ログイン時に

ここで、Springブートを使用しているいくつかの新しいアプリケーションがあります。そのため、LoginUtilクラスはもう機能しません。

どのアプリケーションでも使用できるようにLoginUtilクラスを変更することを提案します。最初の私の考えは、顔のコンテキストを削除し、純粋なセッションオブジェクトを使用することですが、メソッドは静的なので、内部の通常の変数を使用することはできません。そしてアプリケーションはクラスタ化されたサーバーにデプロイされるので、私は静的変数を使用できません。

答えて

0

あなたの最初のアイデアは、そのクレイジーではありません

ContextFaces、そして、あなたはサーブレットフィルタを使用することによって、すべての要求のために、同じことを行うのThreadLocalを作ることができ、要求のため

をThreadLocalのを使用していますログインユーザーにローカルを追加すると、これはすべてのアプリで動作します

class LoginUtil { 
private static final ThreadLocal<UserInformation> userInfo = new ThreadLocal(); 

void setUserInfo(UserInformation user){ 

userInfo.set(user); 
} 


} 

class UserInformation{ 
HttpSession session; 

UserInformation(HttpSession session){ 
this.session = session; 
} 
} 

@WebFilter() 
class FilterFoo implements Filter{ 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) { 
    try{ 
    LoginUtil.setUserInfo(new UserInformation(request.) 
    chain.doFilter(((HttpServletRequest)request).getSession(),response); 
    }finally{ 
    LoginUtil.setUserInfo(null); 
    } 
} 
関連する問題