SessionContext.getCallerPrincipal.getName() 返回"ANONYMOUS"



在我的Java EE应用程序中,我声明了以下restful类

@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"。

现在,我尝试从另一个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');
   }
});

提醒的结果是"ANONYMOUS",尽管我在同一会话中仍然以"myuser"身份登录。

那么,为什么在第二种情况下调用方主体会发生变化,有解决方案吗?

好吧,它完成了。。。

这个想法是

   sessionContext.getCallerPrincipal.getName()

取决于调用方(客户端)的上下文,实际上它运行在哪个应用程序服务器上。

我的ExtJS应用程序(客户端)最初在Jitty服务器上运行,而JavaEE应用程序(服务器端)则在GlassFish上运行。

问题出在两个不同的应用程序服务器上,因此产生了两种不同的上下文。

显然。。。我在glassfish上部署了这两个应用程序后,一切都很顺利。

相关内容

  • 没有找到相关文章

最新更新