Jsf 2 如何调用backingbean方法从传入请求中获取请求头值并将结果转发到JSF页面

Jsf 2 如何调用backingbean方法从传入请求中获取请求头值并将结果转发到JSF页面,jsf-2,http-headers,authentication,Jsf 2,Http Headers,Authentication,我的要求是“我们的用户通过使用SSO的外部系统进行身份验证”。 成功身份验证后,外部系统返回头变量,即。用户ID, firstName、lastName等添加到我们的系统中。 目前,我可以使用 我的JSP页面中的request.getHeader(“userId”) 但我使用的是JSF2.0,无法理解如何在JSF中实现这一点。我在这里看到了一个关于堆栈溢出的示例 Map<String, String> requestHeaders = context.getExternalConte

我的要求是“我们的用户通过使用SSO的外部系统进行身份验证”。 成功身份验证后,外部系统返回头变量,即。用户ID, firstName、lastName等添加到我们的系统中。 目前,我可以使用 我的JSP页面中的request.getHeader(“userId”)

但我使用的是JSF2.0,无法理解如何在JSF中实现这一点。我在这里看到了一个关于堆栈溢出的示例

Map<String, String> requestHeaders = context.getExternalContext().getRequestHeaderMap(); 
String userName = requestHeaders.get(requestHeaderName); 
Map requestHeaders=context.getExternalContext().getRequestHeaderMap();
字符串用户名=requestHeaders.get(requestHeaderName);
但是对于如何在支持bean上调用它,没有进一步的响应


任何指针或示例代码都会有帮助。

上下文就在这里。这是一个基于请求的threadlocal变量,在所有JSF代码中始终可用,该代码由
FacesServlet
控制

FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestHeaders = context.getExternalContext().getRequestHeaderMap(); 
String userName = requestHeaders.get(requestHeaderName); 
// ...
FacesContext context=FacesContext.getCurrentInstance();
Map requestHeaders=context.getExternalContext().getRequestHeaderMap();
字符串用户名=requestHeaders.get(requestHeaderName);
// ...

您可以在bean的构造函数、bean的
@PostConstruct
方法、bean的action(listener)方法等中调用它。正确的位置取决于您想要收集这些信息的时刻以及您想要对这些信息做什么。

上下文就在这里。这是一个基于请求的threadlocal变量,在所有JSF代码中始终可用,该代码由
FacesServlet
控制

FacesContext context = FacesContext.getCurrentInstance();
Map<String, String> requestHeaders = context.getExternalContext().getRequestHeaderMap(); 
String userName = requestHeaders.get(requestHeaderName); 
// ...
FacesContext context=FacesContext.getCurrentInstance();
Map requestHeaders=context.getExternalContext().getRequestHeaderMap();
字符串用户名=requestHeaders.get(requestHeaderName);
// ...

您可以在bean的构造函数、bean的
@PostConstruct
方法、bean的action(listener)方法等中调用它。正确的位置取决于您希望收集此信息的时间以及您希望如何处理此信息。

感谢Balus的回复。例如,我有一个LoginBean.java,我想在构造函数中调用这段代码。但是我的url应该是什么样的,这样才能调用LoginBean的构造函数。假设我的应用程序部署为weblogic上的/web。那么url是否会直接调用LoginBean的构造函数,或者我是否需要在web.xml或faces-config.xml中的某个位置进行一些配置映射。只是要查看视图的url<代码>登录.xhtml可能吗?您只需将
LoginBean
的属性和操作绑定到该视图的组件。感谢Balus的响应。例如,我有一个LoginBean.java,我想在构造函数中调用这段代码。但是我的url应该是什么样的,这样才能调用LoginBean的构造函数。假设我的应用程序部署为weblogic上的/web。那么url是否会直接调用LoginBean的构造函数,或者我是否需要在web.xml或faces-config.xml中的某个位置进行一些配置映射。只是要查看视图的url<代码>登录.xhtml可能吗?您只需将
LoginBean
的属性和操作绑定到该视图的组件。