首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SessionContext.getCallerPrincipal.getName()返回“匿名”

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

Stack Overflow用户
提问于 2014-08-27 08:49:22
回答 1查看 1.7K关注 0票数 0

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

代码语言:javascript
复制
@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浏览器上

代码语言:javascript
复制
http://localhost:8080/MyApp/rest/userProfile/userName

显示的响应与预期的一样:"myuser“。

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

代码语言:javascript
复制
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“的身份登录。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-27 16:05:19

好吧,完成了..。

我的想法是

代码语言:javascript
复制
   sessionContext.getCallerPrincipal.getName()

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

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

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

Clearly...after我在玻璃鱼上部署了这两个应用程序,一切都很顺利。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25522758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档