私の Java EE アプリケーションでは、次の安らかなクラスを宣言します。
@Path("userProfile")
@Stateless
public class UserProfileRestful {
@Resource
private SessionContext sessionContext;
@Path("userName")
@GET
@Produces(MediaType.Text_Palin)
public String findCurrentUserName(){
return sessionContext.getCallerPrincipal.getName();
}
}
任意のクライアントを介して現在ログインしているユーザーのユーザー名を取得することを目指しています。
ユーザー名「myuser」でログインした後、新しいタブで次の URL を Web ブラウザーに貼り付けました。
http://localhost:8080/MyApp/rest/userProfile/userName
表示された応答は期待どおりでした:「myuser」。
ここで、次のように Ajax リクエストを実行して、別の ExtJS アプリケーション (認証を必要としない) 内からそのユーザー名を取得しようとしました。
Ext.Ajax.Request({
url : "http://localhost:8080/MyApp/rest/userProfile/userName",
success : function(response,options){
alert('username : ' + response.responseText);
},
failure : function(){
alert('request failed');
}
});
同じセッション中に「myuser」としてログインしているにもかかわらず、アラートの結果は「ANONYMOUS」でした。
では、2 番目のケースで呼び出し元のプリンシパルが変更されるのはなぜですか?また、その解決策はありますか?