SessionContext.getCallerPrincipal.getName()返回“匿名”

SessionContext.getCallerPrincipal.getName()返回“匿名”

问题描述:

在我的Java EE应用程序,我宣布了下述宁静类SessionContext.getCallerPrincipal.getName()返回“匿名”

@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的”,我刚才粘贴以下网址到Web浏览器在新标签

http://localhost:8080/MyApp/rest/userProfile/userName 

和显示的反应是如期望的那样“为myuser”。

现在我试图从另一个ExtJS的应用程序(不要求身份验证)执行一个Ajax请求中获取用户名如下:

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”身份登录。

那么,为什么调用者主体在第二种情况下发生变化,并且是否有解决方案?

那么,它完成了...

的想法是,

sessionContext.getCallerPrincipal.getName() 

取决于调用者(客户端)的情况下,几乎在其应用程序服务器运行它。

我的ExtJS应用程序(客户端)首次在Jitty服务器上运行,而Java EE应用程序(服务器端)在GlassFish上运行。

两个不同的应用程序服务器,因此两个不同的上下文是问题。

很明显......在我将两个应用程序都部署在玻璃鱼上之后,一切都顺利进行。