내용 |
1. 의존성 주입
spring-boot-starter-security
thymeleaf-extras-springsecurity6 <-- sec 네임스페이스 사용
2. SecurityConfig 파일 작성
SecurityFilterChain 빈을 정의해야 함
로그인/로그아웃 페이지 설정(인증페이지 설정)
필터 매핑 설정(인가 설정)
3. UserDetailsService 인터페이스 구현
인증 정보를 조회(DB) <-- 데이터베이스에서 사용자아이디, 비밀번호, 권한 정보를 조회
정보(username, password, authorities)를 User 클래스에 담아서 반환
4. 타임리프 코드 작성
<html xmlns:th="..." xmlsn:sec="http://www.thymeleaf.org/extras/spring-security">
<div sec:authorize="isAnonymous()">인증 안됨</div>
<div sec:authorize="isAuthenticated()">인증 됨</div>
<div sec:authentication="name">사용자이름</div>
<div sec:authentication="principal.authorities">권한</div>
5. 스프링시큐리티의 User 클래스를 상속한 클래스 작성
반드시 생성자를 추가해야 함
id, pw, auth외의 정보를 시큐리티 세션에 담아야 할 경우
super(username, password, authorities);
this.userEmail = userEmail;
* 클래스는 UserDetailsService의 메서드가 User 객체를 반환해야 할 경우
6. 정보 저장하는 컨트롤러 수정
비밀번호를 저장하는 열의 크기는 70바이트 이상
비밀번호를 PasswordEncoder를 이용해서 인코딩
PasswordEncoder pwEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
String encodedPw = pwEncoder.encode(member.getPassword());
member.setPassword(encodedPw);
7. 패스워드 인코더 빈 추가
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
} |