시작 데이터
새 설치가 갖고 시작하는 데이터(관리자, 카탈로그)는 생성된 서비스를 통해 저장합니다. 그래야 비밀번호가 해시되고
다른 행처럼 모든 규칙이 지켜집니다. 권한 검사가 방문자를 거절하므로 코드는 애플리케이션 자신이라고 밝힙니다:
CurrentUser.runAsSystem.
에이전트 키트의 상점 레시피에서:
src/main/java/com/acme/store/StoreSeed.java
@Component
class StoreSeed implements ApplicationRunner {
private final MemberService members;
private final ProductService products;
StoreSeed(MemberService members, ProductService products) {
this.members = members;
this.products = products;
}
@Override
public void run(ApplicationArguments args) {
CurrentUser.runAsSystem(() -> {
MemberSrchDTO admin = new MemberSrchDTO();
admin.setLogin("admin");
if (members.countBySearch(admin) > 0) return;
MemberDTO a = new MemberDTO();
a.setLogin("admin");
a.setPassword("admin-1234");
a.setName("Administrator");
a.setRole(MemberRole.ADMIN);
a.setAddress(new Address("1 Main Street", "Seoul", "04524"));
members.save(a);
product("Angelfish", "10.00");
product("Bulldog", "180.00");
});
}
private void product(String name, String price) {
ProductDTO p = new ProductDTO();
p.setName(name);
p.setPrice(Money.of(price));
products.save(p);
}
}
runAsSystem안에서만 모든@access검사가 통과합니다. 관리자를 만들 수 있는 것은 애플리케이션 자신뿐입니다:role이@access(admin)이기 때문입니다.ApplicationRunner는 서버가 이미 요청에 답하기 시작한 뒤에 돕니다.- 만들기 전에 확인합니다(
countBySearch). 영속 DB 로 다시 시작해도 행이 겹치지 않습니다. - Pet Store 도
DemoAccounts에서 같은 일을 합니다(user·admin계정,petstore.demo-accounts=false로 끔). 카탈로그는data.sql에서 옵니다.