728x90
- SetupDataLoader
- 초기 데이터를 넣어두었다.
-
@Component public class SetupDataLoader implements ApplicationListener<ContextRefreshedEvent> { private boolean alreadySetup = false; @Autowired private UserRepository userRepository; @Autowired private RoleRepository roleRepository; @Autowired private ResourcesRepository resourcesRepository; @Autowired private PasswordEncoder passwordEncoder; private static AtomicInteger count = new AtomicInteger(0); @Override @Transactional public void onApplicationEvent(final ContextRefreshedEvent event) { if (alreadySetup) { return; } setupSecurityResources(); alreadySetup = true; } private void setupSecurityResources() { Set<Role> roles = new HashSet<>(); Role adminRole = createRoleIfNotFound("ROLE_ADMIN", "관리자"); roles.add(adminRole); createResourceIfNotFound("/admin/**", "", roles, "url"); Account account = createUserIfNotFound("admin", "pass", "admin@gmail.com", 10, roles); } @Transactional public Role createRoleIfNotFound(String roleName, String roleDesc) { Role role = roleRepository.findByRoleName(roleName); if (role == null) { role = Role.builder() .roleName(roleName) .roleDesc(roleDesc) .build(); } return roleRepository.save(role); } @Transactional public Account createUserIfNotFound(String userName, String password, String email, int age, Set<Role> roleSet) { Account account = userRepository.findByUsername(userName); if (account == null) { account = Account.builder() .username(userName) .email(email) .age(age) .password(passwordEncoder.encode(password)) .userRoles(roleSet) .build(); } return userRepository.save(account); } @Transactional public Resources createResourceIfNotFound(String resourceName, String httpMethod, Set<Role> roleSet, String resourceType) { Resources resources = resourcesRepository.findByResourceNameAndHttpMethod(resourceName, httpMethod); if (resources == null) { resources = Resources.builder() .resourceName(resourceName) .roleSet(roleSet) .httpMethod(httpMethod) .resourceType(resourceType) .orderNum(count.incrementAndGet()) .build(); } return resourcesRepository.save(resources); } }
- 도메인 관계도

도메인 관계도 
728x90
'스프링 시큐리티 > 실전프로젝트 - 인가 프로세스 DB 연동 웹 계층 구현' 카테고리의 다른 글
| ch06. 웹 기반 인가처리 실시간 반영하기 (0) | 2022.01.24 |
|---|---|
| ch05. 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2) (0) | 2022.01.24 |
| ch04. 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (1) (0) | 2022.01.24 |
| ch03. 웹 기반 인가처리 DB 연동 - 주요 아키텍처 이해 (0) | 2022.01.24 |
| ch01. 스프링 시큐리티 인가 개요 (0) | 2022.01.23 |