Skip to content

Commit 2937fca

Browse files
committed
add spring security roles and privileges
1 parent f924f8b commit 2937fca

File tree

12 files changed

+234
-59
lines changed

12 files changed

+234
-59
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.Privilege;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface PrivilegeRepository extends JpaRepository<Privilege, Long> {
7+
public Privilege findByName(String name);
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.baeldung.persistence.dao;
2+
3+
import org.baeldung.persistence.model.Role;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface RoleRepository extends JpaRepository<Role, Long> {
7+
public Role findByName(String name);
8+
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package org.baeldung.persistence.model;
2+
3+
import java.util.Collection;
4+
5+
import javax.persistence.Entity;
6+
import javax.persistence.GeneratedValue;
7+
import javax.persistence.GenerationType;
8+
import javax.persistence.Id;
9+
import javax.persistence.ManyToMany;
10+
import javax.persistence.Table;
11+
12+
@Entity
13+
@Table
14+
public class Privilege {
15+
@Id
16+
@GeneratedValue(strategy = GenerationType.AUTO)
17+
private Long id;
18+
19+
private String name;
20+
21+
@ManyToMany(mappedBy = "privileges")
22+
private Collection<Role> roles;
23+
24+
public Privilege() {
25+
super();
26+
}
27+
28+
public Privilege(String name) {
29+
super();
30+
this.name = name;
31+
}
32+
33+
public Long getId() {
34+
return id;
35+
}
36+
37+
public void setId(Long id) {
38+
this.id = id;
39+
}
40+
41+
public String getName() {
42+
return name;
43+
}
44+
45+
public void setName(String name) {
46+
this.name = name;
47+
}
48+
49+
public Collection<Role> getRoles() {
50+
return roles;
51+
}
52+
53+
public void setRoles(Collection<Role> roles) {
54+
this.roles = roles;
55+
}
56+
57+
@Override
58+
public int hashCode() {
59+
final int prime = 31;
60+
int result = 1;
61+
result = prime * result + ((name == null) ? 0 : name.hashCode());
62+
return result;
63+
}
64+
65+
@Override
66+
public boolean equals(final Object obj) {
67+
if (this == obj)
68+
return true;
69+
if (obj == null)
70+
return false;
71+
if (getClass() != obj.getClass())
72+
return false;
73+
final Privilege privilege = (Privilege) obj;
74+
if (!privilege.equals(privilege.name))
75+
return false;
76+
return true;
77+
}
78+
79+
@Override
80+
public String toString() {
81+
final StringBuilder builder = new StringBuilder();
82+
builder.append("Privilege [name=").append(name).append("]").append("[id=").append(id).append("]");
83+
return builder.toString();
84+
}
85+
}
Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
package org.baeldung.persistence.model;
22

3+
import java.util.Collection;
4+
35
import javax.persistence.CascadeType;
46
import javax.persistence.Entity;
5-
import javax.persistence.FetchType;
67
import javax.persistence.GeneratedValue;
78
import javax.persistence.GenerationType;
89
import javax.persistence.Id;
9-
import javax.persistence.JoinColumn;
10-
import javax.persistence.OneToOne;
10+
import javax.persistence.JoinTable;
11+
import javax.persistence.ManyToMany;
12+
import javax.persistence.OneToMany;
1113
import javax.persistence.Table;
14+
import javax.persistence.JoinColumn;
1215

1316
@Entity
1417
@Table
@@ -18,25 +21,22 @@ public class Role {
1821
@GeneratedValue(strategy = GenerationType.AUTO)
1922
private Long id;
2023

21-
@OneToOne(targetEntity = User.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
22-
@JoinColumn(name = "user_id")
23-
private User user;
24+
@OneToMany(mappedBy = "role")
25+
private Collection<User> users;
2426

25-
private Integer role;
27+
@ManyToMany(cascade = CascadeType.ALL)
28+
@JoinTable(name = "roles_privileges", joinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id"))
29+
private Collection<Privilege> privileges;
2630

27-
public Role() {
28-
super();
29-
}
31+
private String name;
3032

31-
public Role(Integer role) {
33+
public Role() {
3234
super();
33-
this.role = role;
3435
}
3536

36-
public Role(Integer role, User user) {
37+
public Role(String name) {
3738
super();
38-
this.role = role;
39-
this.user = user;
39+
this.name = name;
4040
}
4141

4242
public Long getId() {
@@ -47,27 +47,35 @@ public void setId(Long id) {
4747
this.id = id;
4848
}
4949

50-
public User getUser() {
51-
return user;
50+
public String getName() {
51+
return name;
52+
}
53+
54+
public void setName(String name) {
55+
this.name = name;
56+
}
57+
58+
public Collection<User> getUsers() {
59+
return users;
5260
}
5361

54-
public void setUser(User user) {
55-
this.user = user;
62+
public void setUsers(Collection<User> users) {
63+
this.users = users;
5664
}
5765

58-
public Integer getRole() {
59-
return role;
66+
public Collection<Privilege> getPrivileges() {
67+
return privileges;
6068
}
6169

62-
public void setRole(Integer role) {
63-
this.role = role;
70+
public void setPrivileges(Collection<Privilege> privileges) {
71+
this.privileges = privileges;
6472
}
6573

6674
@Override
6775
public int hashCode() {
6876
final int prime = 31;
6977
int result = 1;
70-
result = prime * result + ((role == null) ? 0 : role.hashCode());
78+
result = prime * result + ((name == null) ? 0 : name.hashCode());
7179
return result;
7280
}
7381

@@ -80,15 +88,15 @@ public boolean equals(final Object obj) {
8088
if (getClass() != obj.getClass())
8189
return false;
8290
final Role role = (Role) obj;
83-
if (!role.equals(role.role))
91+
if (!role.equals(role.name))
8492
return false;
8593
return true;
8694
}
8795

8896
@Override
8997
public String toString() {
9098
final StringBuilder builder = new StringBuilder();
91-
builder.append("Role [role=").append(role).append("]").append("[id=").append(id).append("]");
99+
builder.append("Role [name=").append(name).append("]").append("[id=").append(id).append("]");
92100
return builder.toString();
93101
}
94102
}

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/model/User.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
package org.baeldung.persistence.model;
22

3-
import javax.persistence.CascadeType;
4-
//ERASE
5-
import javax.persistence.Column;
3+
64
import javax.persistence.Entity;
7-
import javax.persistence.FetchType;
85
import javax.persistence.GeneratedValue;
96
import javax.persistence.GenerationType;
107
import javax.persistence.Id;
11-
import javax.persistence.OneToOne;
8+
import javax.persistence.JoinColumn;
9+
import javax.persistence.ManyToOne;
10+
import javax.persistence.Table;
1211

1312
@Entity
13+
@Table
1414
public class User {
1515

1616
@Id
@@ -29,7 +29,8 @@ public class User {
2929

3030
private boolean tokenExpired;
3131

32-
@OneToOne(mappedBy = "user", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
32+
@ManyToOne(optional = false)
33+
@JoinColumn(name = "role_id")
3334
private Role role;
3435

3536
public User() {

spring-security-login-and-registration/src/main/java/org/baeldung/persistence/service/UserService.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
import javax.transaction.Transactional;
44

5+
import org.baeldung.persistence.dao.RoleRepository;
56
import org.baeldung.persistence.dao.UserRepository;
67
import org.baeldung.persistence.dao.VerificationTokenRepository;
7-
import org.baeldung.persistence.model.Role;
88
import org.baeldung.persistence.model.User;
99
import org.baeldung.persistence.model.VerificationToken;
1010
import org.baeldung.validation.EmailExistsException;
@@ -24,6 +24,9 @@ public class UserService implements IUserService {
2424
@Autowired
2525
private PasswordEncoder passwordEncoder;
2626

27+
@Autowired
28+
private RoleRepository roleRepository;
29+
2730
// API
2831

2932
@Override
@@ -38,7 +41,7 @@ public User registerNewUserAccount(UserDto accountDto) throws EmailExistsExcepti
3841
user.setPassword(passwordEncoder.encode(accountDto.getPassword()));
3942
user.setEmail(accountDto.getEmail());
4043

41-
user.setRole(new Role(Integer.valueOf(1), user));
44+
user.setRole(roleRepository.findByName("ROLE_USER"));
4245
return repository.save(user);
4346
}
4447

@@ -77,4 +80,4 @@ private boolean emailExist(String email) {
7780
return false;
7881
}
7982

80-
}
83+
}

spring-security-login-and-registration/src/main/java/org/baeldung/security/MySimpleUrlAuthenticationSuccessHandler.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,11 @@ protected String determineTargetUrl(Authentication authentication) {
4848
boolean isAdmin = false;
4949
Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
5050
for (GrantedAuthority grantedAuthority : authorities) {
51-
if (grantedAuthority.getAuthority().equals("ROLE_USER")) {
51+
if (grantedAuthority.getAuthority().equals("READ_PRIVILEGE")) {
5252
isUser = true;
53-
break;
54-
} else if (grantedAuthority.getAuthority().equals("ROLE_ADMIN")) {
53+
} else if (grantedAuthority.getAuthority().equals("WRITE_PRIVILEGE")) {
5554
isAdmin = true;
55+
isUser = false;
5656
break;
5757
}
5858
}

spring-security-login-and-registration/src/main/java/org/baeldung/security/MyUserDetailsService.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
import org.springframework.security.core.userdetails.UserDetails;
88
import org.springframework.security.core.userdetails.UserDetailsService;
99
import org.springframework.security.core.userdetails.UsernameNotFoundException;
10+
import org.baeldung.persistence.dao.RoleRepository;
1011
import org.baeldung.persistence.dao.UserRepository;
12+
import org.baeldung.persistence.model.Privilege;
13+
import org.baeldung.persistence.model.Role;
1114
import org.baeldung.persistence.model.User;
1215
import org.baeldung.persistence.service.IUserService;
1316
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,7 +30,9 @@ public class MyUserDetailsService implements UserDetailsService {
2730
private IUserService service;
2831
@Autowired
2932
private MessageSource messages;
30-
33+
@Autowired
34+
private RoleRepository roleRepository;
35+
3136
public MyUserDetailsService() {
3237

3338
}
@@ -40,34 +45,33 @@ public UserDetails loadUserByUsername(String email) throws UsernameNotFoundExcep
4045
try {
4146
User user = userRepository.findByEmail(email);
4247
if (user == null) {
43-
return new org.springframework.security.core.userdetails.User(" ", " ", enabled, true, true, true, getAuthorities(new Integer(1)));
48+
return new org.springframework.security.core.userdetails.User(" ", " ", enabled, true, true, true, getAuthorities(roleRepository.findByName("ROLE_USER")));
4449
}
4550

46-
return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), user.isEnabled(), accountNonExpired, credentialsNonExpired, accountNonLocked, getAuthorities(user.getRole().getRole()));
51+
return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), user.isEnabled(), accountNonExpired, credentialsNonExpired, accountNonLocked, getAuthorities(user.getRole()));
4752
} catch (Exception e) {
4853
throw new RuntimeException(e);
4954
}
5055
}
5156

52-
private Collection<? extends GrantedAuthority> getAuthorities(Integer role) {
53-
List<GrantedAuthority> authList = getGrantedAuthorities(getRoles(role));
57+
private Collection<? extends GrantedAuthority> getAuthorities(Role roleName) {
58+
List<GrantedAuthority> authList = getGrantedAuthorities(getPrivileges(roleName));
5459
return authList;
5560
}
5661

57-
public List<String> getRoles(Integer role) {
58-
List<String> roles = new ArrayList<String>();
59-
if (role.intValue() == 2) {
60-
roles.add("ROLE_ADMIN");
61-
} else if (role.intValue() == 1) {
62-
roles.add("ROLE_USER");
62+
public List<String> getPrivileges(Role role) {
63+
List<String> privileges = new ArrayList<String>();
64+
Collection<Privilege> collection = role.getPrivileges();
65+
for (Privilege item : collection) {
66+
privileges.add(item.getName());
6367
}
64-
return roles;
68+
return privileges;
6569
}
6670

67-
private static List<GrantedAuthority> getGrantedAuthorities(List<String> roles) {
71+
private static List<GrantedAuthority> getGrantedAuthorities(List<String> privileges) {
6872
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
69-
for (String role : roles) {
70-
authorities.add(new SimpleGrantedAuthority(role));
73+
for (String privilege : privileges) {
74+
authorities.add(new SimpleGrantedAuthority(privilege));
7175
}
7276
return authorities;
7377
}

0 commit comments

Comments
 (0)