java - JSF 2.0 管理用户

标签 java jsf managed-bean

我是从 Rails 和 PHP 转到 Java 的,所以我在这里的想法可能有问题。 我想实现一个类似于我在其他系统中所做的登录系统(我知道您可以使用 Java EE 的内置属性管理登录等,我只是想了解如何手动执行此操作并在其中共享对象 bean 。)

使用 rails 或 php 很容易维护一个保存登录用户 ID 的 session 变量。然后 PHP 中的全局变量或 rails 中 applicationController 上的属性可以与用户对象一起预加载,使其在所有 Controller /页面中可用。这样,所有页面/ Controller 都可以轻松访问用户的登录状态和其他参数。

我不知道如何使用 JSF 做类似的事情。

我知道如何使用 JPA 构建用户对象,然后在使用登录表单的登录方法登录后创建一个具有 session 范围的托管 bean,该 bean 保存对用户对象的引用。我理解的那部分:

@ManagedBean
@SessionScope
public class LogginController {

// inject persistence context, or use EJB to do actual loading etc
private User currentUser;     //JPA Entity

void loginAction() {
  // action from login form
  // authenticates user and loads user object into currentUser property

我被卡住的地方是,虽然包含 currentUser 属性的托管 bean 具有 session 范围,但我如何访问其他托管 bean 中的该属性以获取当前用户?托管 bean 似乎彼此隔离存在。

下面的代码可以接受吗?

@ManagedBean
public class SomeOtherBean {

@ManagedProperty
LoginController loginController;

public void someOtherMethod() {
User myUser = loginController.getCurrentUser();
   //
   // etc

注入(inject) bean 的类是否也必须具有 SessionScope? 这是错误的方法吗,我是否需要使用底层 ServletContext 手动设置 session ,以便可以在其他 bean 中访问用户(即在 session 中保存登录用户的 ID,然后在访问用户后重新加载用户不同 bean 中的 id session 变量)?

我是不是做错了?有没有我想念的更简单的方法。

最佳答案

Is the following code acceptable?

是的(假设它是伪造的;在真实代码中它应该是一个private 属性并且您应该像这样指定托管属性值@ManagedProperty("#{loginController}") 并至少提供一个 setter 方法)。


Would the class having the bean injected also have to have SessionScope too?

不一定。它可以完全是一个请求或 View 作用域的 bean,但不是应用程序作用域的 bean(它会导致异常)。至少,您应该非常小心地选择 bean 作用域。不要为其包含的数据选择太广泛的范围。另见 How to choose the right bean scope? .

关于java - JSF 2.0 管理用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343097/

相关文章:

java - 如何在 JavaFX 中锁定按钮的位置?

java - 从日历创建自定义日期对象?

jsf-2 - 通过 FacesContext 传递请求参数

JavaFx textfield.setText() 方法不起作用

java - Hazelcast 可序列化映射 ClassNotFound 异常

java - 关于Seam上下文范围的问题

jsf - 如何修复 p :dialog 的宽度和高度

jsf - 如何将 Action 字符串传递给 JSF 2 复合组件?

java - 如何使用 @OneToOne 关系同时持久化两个实体?

java - 得到<h :outputText> as ManagedProperty in backing bean