SetupDataLoader
This commit is contained in:
@@ -4,4 +4,6 @@ import com.security.basic.persistence.model.Privilege;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface PrivilegeRepository extends JpaRepository<Privilege, Long> {
|
||||
|
||||
Privilege findByName(String name);
|
||||
}
|
||||
|
||||
@@ -4,4 +4,6 @@ import com.security.basic.persistence.model.Role;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface RoleRepository extends JpaRepository<Role, Long> {
|
||||
|
||||
Role findByName(String name);
|
||||
}
|
||||
|
||||
@@ -4,4 +4,6 @@ import com.security.basic.persistence.model.User;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface UserRepository extends JpaRepository<User, Long> {
|
||||
|
||||
User findByEmail(String email);
|
||||
}
|
||||
|
||||
@@ -21,4 +21,9 @@ public class Privilege {
|
||||
|
||||
@ManyToMany(mappedBy = "privileges")
|
||||
private Collection<Role> roles;
|
||||
|
||||
public Privilege(final String name) {
|
||||
super();
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,4 +29,12 @@ public class Role {
|
||||
inverseJoinColumns = @JoinColumn(name = "privilege_id", referencedColumnName = "id")
|
||||
)
|
||||
private Collection<Privilege> privileges;
|
||||
|
||||
public Role() {
|
||||
super();
|
||||
}
|
||||
|
||||
public Role(final String name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.security.basic.persistence.model;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@@ -8,6 +9,7 @@ import java.util.Collection;
|
||||
|
||||
|
||||
@Entity
|
||||
@Builder
|
||||
@Getter
|
||||
@Setter
|
||||
@Table(name = "users")
|
||||
|
||||
96
src/main/java/com/security/basic/spring/SetupDataLoader.java
Normal file
96
src/main/java/com/security/basic/spring/SetupDataLoader.java
Normal file
@@ -0,0 +1,96 @@
|
||||
package com.security.basic.spring;
|
||||
|
||||
import com.security.basic.persistence.dao.PrivilegeRepository;
|
||||
import com.security.basic.persistence.dao.RoleRepository;
|
||||
import com.security.basic.persistence.dao.UserRepository;
|
||||
import com.security.basic.persistence.model.Privilege;
|
||||
import com.security.basic.persistence.model.Role;
|
||||
import com.security.basic.persistence.model.User;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.ApplicationListener;
|
||||
import org.springframework.context.event.ContextRefreshedEvent;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.transaction.Transactional;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class SetupDataLoader implements ApplicationListener<ContextRefreshedEvent> {
|
||||
|
||||
private final UserRepository userRepository;
|
||||
private final RoleRepository roleRepository;
|
||||
private final PrivilegeRepository privilegeRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
private boolean alreadySetup = false;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void onApplicationEvent(ContextRefreshedEvent event) {
|
||||
|
||||
if (alreadySetup) {
|
||||
return;
|
||||
}
|
||||
|
||||
//create initial privileges
|
||||
Privilege readPrivilege = createPrivilegeIfNotFound("READ_PRIVILEGE");
|
||||
Privilege writePrivilege = createPrivilegeIfNotFound("WRITE_PRIVILEGE");
|
||||
|
||||
//create initial roles
|
||||
List<Privilege> adminPrivileges = Arrays.asList(readPrivilege, writePrivilege);
|
||||
createRoleIfNotFound("ROLE_ADMIN", adminPrivileges);
|
||||
|
||||
List<Privilege> userPrivileges = Arrays.asList(readPrivilege);
|
||||
createRoleIfNotFound("ROLE_USER", userPrivileges);
|
||||
|
||||
Role adminRole = roleRepository.findByName("ROLE_ADMIN");
|
||||
Role userRole = roleRepository.findByName("ROLE_USER");
|
||||
|
||||
//create initial admin
|
||||
createUserIfNotFound("admin@admin.test", "test1234!", Arrays.asList(adminRole));
|
||||
|
||||
//create initial user
|
||||
createUserIfNotFound("user@user.test", "test1234!", Arrays.asList(userRole));
|
||||
|
||||
alreadySetup = true;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
Privilege createPrivilegeIfNotFound(String name) {
|
||||
Privilege privilege = privilegeRepository.findByName(name);
|
||||
if (privilege == null) {
|
||||
privilege = new Privilege(name);
|
||||
privilegeRepository.save(privilege);
|
||||
}
|
||||
return privilege;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
Role createRoleIfNotFound(String name, Collection<Privilege> privileges) {
|
||||
Role role = roleRepository.findByName(name);
|
||||
if (role == null) {
|
||||
role = new Role(name);
|
||||
role.setPrivileges(privileges);
|
||||
roleRepository.save(role);
|
||||
}
|
||||
return role;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
User createUserIfNotFound(final String email, final String password, final Collection<Role> roles) {
|
||||
User user = userRepository.findByEmail(email);
|
||||
if (user == null) {
|
||||
user = User.builder()
|
||||
.email(email)
|
||||
.password(passwordEncoder.encode(password))
|
||||
.roles(roles)
|
||||
.build();
|
||||
userRepository.save(user);
|
||||
}
|
||||
return user;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user