JSF - méthode java: getCurrentUserName
Je suis en mesure de passer le nom d'utilisateur de JSF pour managed bean par exemple de cette façon:
<script type="text/javascript" >
function onLoad(){
document.getElementById("form:user").value = "#{sessionScope['username']}";}
window.onload = onLoad;
</script>
<h:inputHidden id="user" value="#{bean.username}"/>
Est-il possible de le faire directement à l'aide de méthode en Java?
J'ai essayé quelque chose comme:
public String getCurrentUserName()
{
String name = "";
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
if (externalContext.getUserPrincipal() != null) {
name = externalContext.getUserPrincipal().getName(); //null
}
return name;
}
ou:
facesContext.getExternalContext().getRemoteUser(); //null
facesContext.getExternalContext().isUserInRole("pps"); //null
Mais l'utilisateur est toujours null.. ce qui fais de mal?
Mise à JOUR (création d'une session conteneur):
public String login() {
...
FacesContext context = FacesContext.getCurrentInstance();
session = (HttpSession) context.getExternalContext().getSession(true);
session.setAttribute("id", user.getId());
session.setAttribute("username", user.getName());
...
- Comment vous authentifier l'utilisateur?
- Je devine que vous n'êtes pas à l'aide de container-managed authentication. Essayez
externalContext.getSessionMap().get("username")
. - ça y est! merci! merci de créer la réponse à l'accepter 🙂
Vous devez vous connecter pour publier un commentaire.
Fondamentalement imprime l'attribut de session avec le nom
"username"
. Quelque chose comme ce qui suit dans raw de code Java (si vous êtes familier avec la base Servlet API):Si cette partie fonctionne, alors vous ne sont certainement pas à l'aide gérée par le conteneur d'authentification à tous et donc la gérée par le conteneur principal d'utilisateur et du rôle de l'utilisateur getters certainement ne retourne rien.
Vous pouvez accéder à un attribut de session de la même manière que vous accéder à une session à l'étendue de l'ACI managed bean (ils sont sous les couvertures à savoir également stockés comme les attributs de session!):
ou, bien sûr, maladroit:
Voir aussi:
Sans rapport avec à la question concrète: je doute fortement de l'utilité de ce champ caché et ce morceau de JS. Pourquoi êtes-vous en passant une variable qui est déjà présents dans le côté serveur vers le serveur de côté? Êtes-vous sûr que vous avez vraiment besoin de faire de cette façon?
User
comme attribut de session qui est vérifié par un filtre de servlet sur certaines Url, etc, exactement comme vous êtes apparemment en train de faire maintenant).FacesContext.getCurrentInstance()....
méthode est maladroit? Et la deuxième chose, j'ai essayé de laManagedProperty
méthode, mais je dois mettre la@ManagedProperty("#{userManager.username}")
et également définir la propriété pourusername
dansuserManager
bean, est-il correct?@ManagedProperty
façon. Comme pour les autres bean, je n'ai aucune idée, ce détail est absent dans la question initiale. J'ai juste donné une réponse qui convient à la question initiale.