프로젝트 정리/스프링과 JPA 기반 웹 애플리케이션 개발
19. 로그인 로그아웃
JunGi Jeong
2021. 10. 18. 23:33
할 일
- 커스텀 로그인 페이지 만들기
- 스프링 시큐리티 로그인/로그아웃 설정
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가 여러개라면 추가적인 설정이 필요