gpt4 book ai didi

java - Glassfish 中的容器管理安全性

转载 作者:行者123 更新时间:2023-12-01 05:31:09 28 4
gpt4 key购买 nike

我已遵循此博客教程并成功使其正常工作: http://jugojava.blogspot.com/2011/02/jdbc-security-realm-with-glassfish-and.html

我已将两个实体命名为GroupUser。它们具有双向多对多关系。现在我在博客中这样做的原因是因为我正在创建一个管理员页面,我希望能够在其中添加新用户。我还让用户有机会自行注册,他们将拥有 user 角色。

    @Entity
public class Group implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String groupName;

@ManyToMany
@JoinTable(joinColumns = {@JoinColumn(name="group_id")}, inverseJoinColumns = {@JoinColumn(name="user_id")})
private List<User> users;

....

}

    @Entity
@Table(name = "app_user")
public class User implements Serializable {

public static final String ALL = "User.all";

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private Integer age;
private String username;
private String email;
private String password;

@ManyToMany(mappedBy = "users")
private List<Group> groups;

....
}

我的问题是,当用户注册时,如何将组 user 分配给用户,而不需要我从 View 的列表中选择组?

这是我在应用程序代码中所做的,但它绑定(bind)了数据库中组的ID的代码,有更好的方法吗?

来自 EJB 的方法

public void persistAsUser(User user) {
Group group = new Group(2L, "user");
user.addGroup(group);

userRepository.persist(user);
}

最佳答案

您可能想要在字段 groupName 上定义一个 UNIQUE 索引。然后,为Group表创建一个数据访问对象,它提供了从groupName获取Group的方法(代码未测试):

public class GroupDAO implements Serializable {
@PersistenceContext private EntityManager em;
public Group findByGroupName(String groupName) {
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Group> cq = cb.createQuery(Group.class);
Root<Group> group = cq.from(Group.class);
cq.where(cb.equal(group.get(Group_.groupName), groupName));
TypedQuery<Group> q = em.createQuery(cq);
return q.getSingleResult();
}
}
<小时/>

如果您不喜欢条件生成器,您可以使用命名查询。将此注释添加到您的组实体类中:

@NamedQuery(name = "Group.findByGroupname", query = "SELECT f FROM group f WHERE f.groupname = :groupname")

并按如下方式构建命名查询:

return em.createNamedQuery("Group.findByGroupname").setParameter("groupname", groupName).getResultList();

关于java - Glassfish 中的容器管理安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8945978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com