할 일
- 커스텀 로그인 페이지 만들기
- 스프링 시큐리티 로그인/로그아웃 설정
http.formLogin() .loginPage("/login").permitAll(); http.logout() .logoutSuccessUrl("/"); |
- 스프링 시큐리티 로그인 기본값
- username
- password
- POST “/login”
SecurityConfig Class
http.formLogin()
.loginPage("/login").permitAll(); // 로그인 페이지 URL에 인증과 무관하게 permitAll
http.logout()
.logoutSuccessUrl("/");
@GetMapping("/login")
public String login() {
// StringBoot의 ViewController로 줄일 수 있음
return "login";
// ViewResolver에 의해 preifx templates/
// surfix .html이 붙게 설정되어 있는 것임
}
@Service
@RequiredArgsConstructor
public class AccountService implements UserDetailsService {
...
@Override
public UserDetails loadUserByUsername(String emailOrNickname) throws UsernameNotFoundException {
Account account = accountRepository.findByEmail(emailOrNickname);
if (account == null) {
account = accountRepository.findByNickname(emailOrNickname);
}
if (account == null) {
// 이메일과 닉네임으로 검증 후 없으면 throw exception
throw new UsernameNotFoundException(emailOrNickname);
}
// 이를 통과하면 유저는 있음 -> 유저 생성 후 리턴
return new UserAccount(account);// principal에 해당하는 객체를 넘김
}
/*
public UserAccount(Account account){
super(account.getNickname(), account.getPassword(), List.of(new SimpleGrantedAuthority("ROLE_USER")));
this.account = account;
}
*/
@Service 어노테이션으로 Bean을 등록했고
UserDetailsService 타입의 Bean이 하나만 있다면 SpringSecurity에 추가적인 설정없이
UserDetailsService Bean을 가지고 로그인 로그아웃을 구현 할 수 있다.
만약 PassWordEncoder가 여러개거나 UserdetailsService가 여러개라면 추가적인 설정이 필요
'프로젝트 정리 > 스프링과 JPA 기반 웹 애플리케이션 개발' 카테고리의 다른 글
21. 로그인 기억하기 (RememberMe) (0) | 2021.12.11 |
---|---|
20. 로그인 / 로그아웃 테스트 (0) | 2021.12.10 |
18. 가입 확인 이메일 재전송 (0) | 2021.04.27 |
17. 현재 인증된 사용자 정보 참조 (0) | 2021.04.24 |
16. 첫 페이지 보완 (0) | 2021.04.24 |