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 в веб-браузер в новой вкладке
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" во время той же сессии.
Итак, почему принципал вызывающей стороны изменяется во 2-м случае, и есть ли решение для этого?
1 ответ
Ну, это сделано...
Идея в том, что
sessionContext.getCallerPrincipal.getName()
зависит от контекста вызывающей стороны (клиента), практически от того, на каком сервере приложений он работает.
Мое приложение ExtJS (на стороне клиента) сначала выполнялось на сервере Jitty, тогда как приложение Java EE (на стороне сервера) работало на GlassFish .
Два разных сервера приложений и, следовательно, два разных контекста были проблемой.
Понятно... после того, как я развернул оба приложения на Glassfish, все прошло хорошо.