2017-12-22 19 views
0

フォームベースの認証を使用するこのJSFプロジェクトがあります。 JSFページを開く最初の試みで、私は自分のログイン・サーバーにリダイレクトされます。そこで認証が行われ、成功すると私のアプリケーションにリダイレクトされます。残念ながら、ユーザー名のように認証サーバーが提供する情報を取得する方法がわかりません。JSFページでLibertyのFORMベース認証からユーザープリンシパルを取得する方法は?

私は、テキストが「サインインされた」と言っているページを持っています。 getCurrentUserPrincipal()メソッドを使用してManagedBeanによって設定される必要があります。

<h:outputText value="#{myBean.getCurrentUserPrincipal()}"/> 

このメソッドは現在空です。 WSSubject.getCallerPrincipal()FacesContext.getCurrentInstance()。getExternalContext()。getUserPrincipal()しかし、それはnullを返しました。 私はその方法で必要な情報をどのように入手できますか? それは可能ですか? 必要な情報が不明なので、何かが欠落している場合はできる限り提供します。

+0

**あなたの**認証サーバーが情報をどこに置くかをどのように知ることができますか?この質問は、決してjava、jsf、servletsまたはjava-eeには関係ありません。 – Kukeltje

+0

[OK]をクリックすると、フォームベースの認証(web.xml)を実行すると、情報はどこに保存されますか。私はログインに成功し、私のアプリケーションに戻ります。これは少なくともj2eeやサーブレットとは関係がありません。それがクッキーに保存されているとしましょう:そこから情報を取得するにはどうすればよいですか?またはLTPAトークン(クッキーと同じ?)?それでは? Btw。私はリバティーを使用しています。 server.xmlにいくつかの設定が必要なのでしょうか? – kinglite

答えて

0

:ようなあなたの管理Bean何かにゲッターを提供し、のoutputTextフィールドに上記のHTMLに基づいて、その後、

@Inject 
private Principal principal; 

いくつかの掘り起こしの後、私たちの認証サーバはsiteminderサービスであり、情報はクッキー(SMSESSION)と応答のヘッダー情報に戻ってきたことがわかりました。 したがって、ヘッダー情報を読み取ってユーザー名を取得すれば十分です。

しかし元本または対象はまだヌルを返します。これを取得してセキュリティを強化するために、LibertyにTAIを追加しました。これがどのように行われたかは、herehereです。私のmyTAI.jarはとてもシンプルです。私はldapレジストリが設定されているので、さらなる認証のために、指定されたユーザ名(ヘッダ)のユーザセキュリティ名(String、例えばuid = ..、ou = ..、ou = ..)が必要です。

return TAIResult.create(HttpServletResponse.SC_OK, userSecName);

バックグラウンドで、Libertyはさらに認証を行い、原則と主語を作成します。すべてが正しく構成され、ユーザーがアプリケーションの入力を許可されている場合、ユーザーは原則と対象オブジェクトを利用できるようになります。

+0

最後に見ることができるように、java-ee(j2eeは古い省略形ではありません)ではなく、以前は動作していなかったという意味でサーブレット関連ではなく、すべてjsfではありません...しかし、あなたはそれを解決しました。 – Kukeltje

0

のように、管理対象Beanに元本を注入:

public String getCurrentUserPrincipal() { 
    return principal.getName(); 
} 
関連する問題