我对如何验证登录用户感到困惑。我正在考虑从无状态 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);
}
}
提前谢谢您。 :)
最佳答案
如果您想保护您的 Bean,您应该使用 Java EE 安全机制,例如 @RolesAllowed
和 sessionContext.getCallerPrincipal()
,而不是创建您自己的机制。如果您在 Web 模块中进行正确的身份验证,安全上下文将传播到 EJB。
有状态 bean 并不是一个好主意,尤其是在您的设计中。您不能在无状态 Bean 中使用有状态 Bean,因为无状态 Bean 实例会在不同的调用/用户之间重用。
关于java - 如何获取登录用户无状态bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29426073/