最近OpenIDサポートを追加したSpringRooで構築されたサイトで解決しようとしている固有の問題があります。私はSpringForumsに何かを投稿し、問題をできる限り説明しようとしましたが、今のところ何の助けも受けていません。
これが概要です。私が最もよく説明できるように。私が取り組んでいるサイトには、SpringSecurityとJDBCUserDetailsServiceを使用した簡単なフォームログインがありました。また、サポートされているOpenIDを介してユーザーがログインできるようにしたかったので、自動登録を使用してOpenIDを実装するためのSpring Securityの例を使用して、単純なフォームとOpenIDログインの両方を許可するようにサイトコードを変更しました。UserDetailsは引き続きデータベースから取得されますが、唯一の違いは、OpenIDユーザーIDがOpenIDプロバイダーから返される完全な認証URL文字列であるということです。
私が遭遇している問題は、ヘッダーコードにあります。次のような簡単なJSPXコードがあります。
<c:choose>
<c:when test="${pageContext['request'].userPrincipal == null}">
<span>
<form method="post" action="${login}" name="login_form" id="login_form">
<input name="j_username" type="text" id="j_username" />
<input name="j_password" type="password" id="j_password" />
<input name="submit" type="submit" id="proceed" />
</form>
</span>
<span>or <a href="${registration_form}">Register</a></span>
</c:when>
<c:otherwise>
<span>Hello, <a href="${user_profile_base}${pageContext['request'].userPrincipal.name}"><img src="${user_img_url}" width='10' height='10' />${pageContext['request'].userPrincipal.name}</a></span> | <a href="${logout}">Logout</a>
</c:otherwise>
</c:choose>
基本的に、ユーザープリンシパルがページコンテキストにない場合(つまり、ユーザーがログインしていない場合)は、のログインを表示します。それ以外の場合は、ユーザーのユーザー名を使用して「ようこそ...」を出力します。このコードは、機能するためにコントローラーコードに特別な規定を必要としませんでした:ユーザーがログインしているかどうか。
ここで問題はOpenIDユーザーにあります。ユーザー名は、ユーザー定義の文字列ではなくなりました。代わりに、どこかにユーザーが読み取り可能なID名が含まれている場合と含まれていない場合がある長いURL文字列(たとえば、GoogleにはGUIDのようなあいまいな文字列があります)。
DBに格納されているユーザーオブジェクト(たまたまUserDetails、fwiwのインスタンス)に「エイリアス」フィールドを追加し、ユーザーが自分で設定できるようにすることを考えましたが、その方法がわかりません。 「一般的な」方法でのJSPX側からのデータ。誰かが似たようなことをしようとしていることは知っていますが、彼らがどのようにそれに近づいたかを示すものは何も見つかりませんでした。