Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Session JSF-java方法:getCurrentUserName_Session_Jsf_Jsf 2_Facescontext - Fatal编程技术网

Session JSF-java方法:getCurrentUserName

Session JSF-java方法:getCurrentUserName,session,jsf,jsf-2,facescontext,Session,Jsf,Jsf 2,Facescontext,我能够将用户名从JSF传递到托管bean,例如: <script type="text/javascript" > function onLoad(){ document.getElementById("form:user").value = "#{sessionScope['username']}";} window.onload = onLoad; </script> <h:inputHidden id="user" value="#{bean

我能够将用户名从JSF传递到托管bean,例如:

<script type="text/javascript" >
  function onLoad(){
    document.getElementById("form:user").value = "#{sessionScope['username']}";}
  window.onload = onLoad;
</script>

<h:inputHidden id="user" value="#{bean.username}"/>
或:

但是用户总是空的。。我做错了什么

更新会话容器的创建:

public String login() {
  ...
  FacesContext context = FacesContext.getCurrentInstance();
  session = (HttpSession) context.getExternalContext().getSession(true);
  session.setAttribute("id", user.getId());
  session.setAttribute("username", user.getName());
  ...
{sessionScope['username']} 这基本上会打印名为username的会话属性。如果您熟悉基本的Java代码,可以在原始Java代码中使用如下内容:

如果这部分工作正常,那么您肯定根本没有使用容器管理的身份验证,因此容器管理的用户主体和用户角色获取程序肯定不会返回任何内容

您访问会话属性的方式与访问会话范围内的JSF托管bean的方式相同,它们也被存储为会话属性!:

@ManagedProperty("#{username}")
private String username; // +setter
当然,还有一种笨拙的方式:

String username = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("username");
另见: -演示如何实际使用容器管理的身份验证 与具体问题无关:我高度怀疑隐藏的输入字段和JS片段的有用性。为什么要将服务器端已经存在的变量传递回服务器端?你确定你真的需要这样做吗?

{sessionScope['username']} 这基本上会打印名为username的会话属性。如果您熟悉基本的Java代码,可以在原始Java代码中使用如下内容:

如果这部分工作正常,那么您肯定根本没有使用容器管理的身份验证,因此容器管理的用户主体和用户角色获取程序肯定不会返回任何内容

您访问会话属性的方式与访问会话范围内的JSF托管bean的方式相同,它们也被存储为会话属性!:

@ManagedProperty("#{username}")
private String username; // +setter
当然,还有一种笨拙的方式:

String username = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("username");
另见: -演示如何实际使用容器管理的身份验证
与具体问题无关:我高度怀疑隐藏的输入字段和JS片段的有用性。为什么要将服务器端已经存在的变量传递回服务器端?您确定需要这样做吗?

如何验证用户身份?我猜您没有使用容器管理的身份验证。试试externalContext.getSessionMap.getusername,就是这样!谢谢请创建答案以接受它:-如何对用户进行身份验证?我猜您没有使用容器管理的身份验证。试试externalContext.getSessionMap.getusername,就是这样!谢谢请创建答案以接受它:-谢谢你,它像往常一样非常有用。。我之所以这样做,仅仅是因为我从JSF一开始就学会了,到现在已经足够了。那你推荐我哪种方法呢?这是你的选择。容器管理的身份验证为您完成了大部分工作,但配置的可能性相当有限。如果您确实需要更多的配置自由度,那么您必须寻找第三方身份验证框架Spring Security、Apache Shiro等,或者自行将用户设置为会话属性,该属性由特定URL上的servlet过滤器检查,等等,和你现在做的完全一样。为什么你认为FacesContext.getCurrentInstance。。。。方法是笨拙的吗?第二件事,我尝试了ManagedProperty方法,但是我必须设置@ManagedProperty{userManager.username},还要在usermanagerbean中设置username的属性,对吗?它本身并不一定笨拙,但与更简单、更抽象的@ManagedProperty方法相比,它是笨拙的。至于另一个bean,我不知道,这个细节在最初的问题中缺失了。我刚刚给出了一个完全符合最初问题的答案。谢谢你,这和往常一样非常有帮助。。我之所以这样做,仅仅是因为我从JSF一开始就学会了,到现在已经足够了。那你推荐我哪种方法呢?这是你的选择。容器管理的身份验证为您完成了大部分工作,但配置的可能性相当有限。如果您确实需要更多的配置自由度,那么您必须寻找第三方身份验证框架Spring Security、Apache Shiro等,或者自行将用户设置为会话属性,该属性由特定URL上的servlet过滤器检查,等等,和你现在做的完全一样。为什么你认为FacesContext.getCurrentInstance。。。。方法是笨拙的吗?第二件事,我尝试了ManagedProperty方法,但是我必须设置@ManagedProperty{userManager.username},还要在usermanagerbean中设置username的属性,对吗?它本身并不一定笨拙,但与更简单、更抽象的@ManagedProperty方法相比,它是笨拙的。至于另一个bean,我不知道,这个细节在最初的问题中缺失了。我只是给出了一个完全符合最初问题的答案。
String username = (String) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("username");