import java.util.Set;
import javax.persistence.*;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String email;
private String password;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.ALL)
@JoinTable(joinColumns = @JoinColumn(name = "id"),inverseJoinColumns = @JoinColumn(name = "roleId"))
private Set<Role> roles;
public User(String email, String password, Set<Role> roles) {
super();
this.email = email;
this.password = password;
this.roles = roles;
}
}
角色
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long id;
private String role;
@ManyToMany(mappedBy = "roles",fetch = FetchType.LAZY)
private Set<User> users;
public Role(String role) {
super();
this.role = role;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Set<User> getUsers() {
return users;
}
public void setUser(Set<User> users) {
this.users = users;
}
}
manytomany
是正确的逻辑关系类型。获得太多角色的原因可能是创建了Role的新实例,但如果数据库中已经存在该角色,则必须将其加载到持久性上下文中,只有在不存在时才创建新角色。
如果您用代码管理事务,那么它将如下所示,如果您使用@transactional
的容器管理持久性,则应该删除事务代码和try-finally块。
try {
List<String> roleNames = Lists.newArrayList("user, admin, superuser");
User user = new User("Peter", "Pan");
List<Role> roles = new ArrayList<>();
entityManager.getTransaction().begin();
for (String roleName : roleNames) {
List<Role> found = entityManager.createQuery("select r from Roles r where r.name = :roleName", Role.class)
.setParameter("roleName", roleName).getResultList();
if (found.isEmpty()) {
Role role = new Role(roleName);
entityManager.persist(role);
roles.add(role);
} else {
roles.addAll(found);
}
}
user.setRoles(roles);
entityManager.persist(user);
entityManager.getTransaction().commit();
} finally {
entityManager.close();
}
就我个人而言,我几乎从不使用JPA的manytomany
,我通常将其分解为2个onetomany
关系,这样我就有了映射表的一个实体,而映射表是由JPA神奇地创建的。这还为您提供了额外的控制,例如,如果您需要修改或删除用户的角色,您可以直接删除UserRoleMapping实体,而不必在role和user上操作列表。它也给你更多的控制级联。
我在学Spring保安。 在浏览了一些教程之后,我发现其中一些使用了UserRole,而一些使用了一个实现身份验证的UserAuthentication类。我尝试实现的一个(并起作用)是创建一个自定义的MyUserDetailsService,它实现UserDetailsService,并授予权限(角色?)像这样: 我想知道用户角色和GrantedAuthorities之间有什么区别(例如,当使用
我正在尝试在 Swift 中创建一个 iOS 应用程序,该应用程序使用 AWS Lambda 使用以下身份验证服务 - https://github.com/danilop/LambdAuth 它使用适用于 iOS 的 AWS 移动开发工具包与迪纳摩数据库和 Lambda 进行通信 - http://docs.aws.amazon.com/mobile/sdkforios/developergui
我试图为AWS实现“开发人员身份验证身份”,如下所示:https://AWS.amazon.com/blogs/mobile/amazon-cognito-innecling-developer-authenticated-identities/ 我很好地理解了基本流程。 我怎样才能做到这一点?
我与拉雷维尔和托拉斯合作,基础工作很好。我确实有一个问题似乎不是随包而来的。我想要的是,当我执行时,如果他们登录,它也会返回他们的角色。目前我知道我可以做
我已经通过 RMI 实现了用于 JMX 身份验证的 ,但是我不确定如何创建角色以允许只读/读写访问级别。例如,在中,我有我的自定义身份验证逻辑,并希望它来确定访问角色。我已经尝试了以下内容,但在JConsole中执行操作时没有区别: 然后我创建了一个访问文件,,包含 和< code > JMX . management . properties ,其中包含< code > com . sun .
我正在研究使用JWT身份验证的Spring Security实现。我不确定如何检查用户角色并在方法级别获得经过身份验证的用户。我在网上看到这个例子: 我需要从JWT令牌中提取用户类型吗?还有其他方法可以实现吗?在我看来,仅使用是不完整的。 看起来这段代码是用来获得用户如果使用会话类型,我得到NPE。你知道对于JWT我如何才能成为用户吗? Github完整来源:https://Github.com/