我对如何验证登录用户感到困惑。我正在考虑从无状态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);
}
}
提前谢谢你。 :)
答案 0 :(得分:2)
如果要保护bean,则应该使用@RolesAllowed
和sessionContext.getCallerPrincipal()
之类的Java EE安全机制,而不是创建自己的机制。如果您将在Web模块中进行适当的身份验证,则安全上下文将传播到EJB。
有状态的豆子并不是一个好主意,特别是在你的设计中。您不能在无状态bean中使用有状态bean,因为无状态Bean实例在不同的调用/用户之间重用。
答案 1 :(得分:0)
关于保护bean - 您应该使用javax.ejb.SessionContext
获取主要信息或检查特定角色并从那里开始。
在Oracle的Java EE 6 tutorial
中有一些关于安全性的好例子