2014-08-27 3 views
0

В моем приложении Java EE, я объявляю следующий успокоительный классSessionContext.getCallerPrincipal.getName() возвращает «ANONYMOUS»

@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 в веб-браузере в новой вкладке

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» в течение того же сеанса.

Итак, почему главный звонящий изменил во втором случае, и есть ли решение для этого?

ответ

1

Ну, его сделали ...

Идея заключается в том, что

sessionContext.getCallerPrincipal.getName() 

зависит от контекста вызывающего абонента (клиента), практически, на котором сервер приложений он работает.

Приложение ExtJS (клиентская сторона) было сначала запущено на сервере Jitty, тогда как приложение Java EE (серверная сторона) работало на GlassFish.

Проблема связана с двумя различными серверами приложений и, следовательно, с двумя различными контекстами.

Ясно ... после того, как я развернул оба приложения на стеклянной рыбке, все прошло правильно.