如何登录用户无状态bean

时间:2015-04-03 04:11:26

标签: java validation java-ee stateless

我对如何验证登录用户感到困惑。我正在考虑从无状态bean调用有状态bean但我读了这个主题access existing instance stateful inside stateless, java ee 6

这是我的想法。

ProductBean.java

@Stateless
@LocalBean
public class ProductBean {
    @EJB private UserBean userBean; // UserBean is SFSB
    public Product addProduct(Product product) {
        if(userBean == null || userBean.getLoggedInUser() == null) {
            // throw an exception
        }
        // persist 
    }
}

ProductController.java

@ManagedBean
@RequestScope
public class ProductController {
    @EJB private ProductBean productBean;
    private Product product;
    public void addProduct() {
        Object result = productBean.addProduct(productBean);
    }
}

提前谢谢你。 :)

2 个答案:

答案 0 :(得分:2)

如果要保护bean,则应该使用@RolesAllowedsessionContext.getCallerPrincipal()之类的Java EE安全机制,而不是创建自己的机制。如果您将在Web模块中进行适当的身份验证,则安全上下文将传播到EJB。

有状态的豆子并不是一个好主意,特别是在你的设计中。您不能在无状态bean中使用有状态bean,因为无状态Bean实例在不同的调用/用户之间重用。

答案 1 :(得分:0)

关于保护bean - 您应该使用javax.ejb.SessionContext获取主要信息或检查特定角色并从那里开始。

在Oracle的Java EE 6 tutorial

中有一些关于安全性的好例子