프로젝트/학습관리시스템(LMS)
로그인&로그아웃 구현
허정주
2022. 11. 9. 03:19
스프링 시큐리티를 이용하여 로그인와 로그아웃을 할 것이므로 Spring Security가 필요하다. 의존을 추가하고 구동하면 기존의 index페이지가 아닌 로그인화면이 나온다. 아이디는 user 암호는 구동하면 생성된다.
- pom.xml에 의존 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- SecurityConfiguration 클래스 생성하여 페이지(주소)들의 권한 설정
- index.html에 회원 정보 링크 추가, MemberController에 해당 링크 메소드 생성
- 회원 정보는 로그인한 이후에 들어가져야하므로 SecurityConfiguration에 패턴 수정
- 로그인 페이지 설정, failureHandler는 실패하였을 때를 처리하는 핸들러를 구현
- failureHandler를 Bean으로 구현하여 자동으로 생성
- 유저 정보를 넘겨주는 메소드 생성
- Authentic configuration을 할때 memberService가 인터페이스를 가지고 있어야함
- userDetailsService는 UserDetailService를 상속 받아야하는 부분이 있으므로
- 내가 만든 MemberService에 extends UserDetailsService 추가
- MemberServiceImpl에서 loadUserByUsername구현
- MemberController에 login 생성, 해당 페이지 생성
- 하지만 로그인이 되지않음, 이유는 security를 설정할 때 PasswordEncoder를 BCryptPE를 사용하였으므로 DB에도 이 형태로 저장되어 있어야함
- MemberServiceImpl에서 멤버를 저장하는 메소드에 인코더 부분 추가
String encPassword = BCrypt.hashpw(parameter.getPassword(), BCrypt.gensalt());
.
.
.
.password(encPassword)
- SecurityConfiguration에 로그아웃 페이지 설정 부분 추가
- 이메일 인증이 활성화 되지 않았는데 로그인이 되면 안되므로 loadUserByUsername 부분에 관련 추가
if(!member.isEmailAuthYn()) {
throw new MemberNotEmailAuthException("이메일 활성화 이후에 로그인 해주세요.");
}
- MemberNotEmailAuthException 생성
public class MemberNotEmailAuthException extends RuntimeException {
public MemberNotEmailAuthException(String error) {
super(error);
}
}
- 에러가 발생하였을 때 에러메시지를 상황에 맞게 출력하기 위해 UserAuthenticationFailureHandler에 추가
String msg = "로그인에 실패하였습니다.";
if(exception instanceof InternalAuthenticationServiceException) {
msg = exception.getMessage();
}