1.의의
- 지정된 형식으로 테이블을 생성하면 JDBC를 이용해서 인증/인가를 처리할 수 있다.
- 생성할 테이블은 사용자를 관리하는 테이블(users) 과 권한을 관리하는 테이블(authorities)이다.
2.테이블 생성
1)유니크 인덱스
CREAE UNIQUE INDEX ix_auth_username ON authorities(username,authority);
- 유니크란 사실 인덱스라기보다는 제약 조건에 가깝다고 볼 수 있다.
- 말 그대로 테이블이나 인덱스에 같은 값이 2개 이상 저장될 수 없음을 의미하는데, MySQL에서는 인덱스 없이 유니크 제약만 설정할 방법이 없다.
- 유니크 인덱스에서 NULL도 저장될 수 있는데, NULL은 특정의 값이 아니므로 2개 이상 저장될 수 있다.
- MySQL에서 프라이머리 키는 기본적으로 NULL을 허용하지 않는 유니크 속성이 자동으로 부여됩니다.
3)기본 JDBC 기반 인증
- JDBC기반 인증을 위해 스프링 시큐리티를 설정한다.
- SecurityConfig.java
//DataSource 자동 주입
@Autowired
DataSource dataSource;
//JDBC기반 인증 스프링 시큐리티 설정
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(passwordEncoder());
}
3.전역 AuthenticationManager를 설정(ch0401a)
- 프로젝트 개발 상황에 따라 JDBC기반 인증을 위해 AuthenticationManager를 설정할 수도 있다.