Spring Projcect/학습 관리 시스템 & 백오피스 구축

Chapter 07. 스프링 부트 프로젝트 - 로그인/로그아웃

계란💕 2022. 8. 18. 12:28

 

  Ex) SecurityConfiguration

 

    - demo4 프로젝트 만든다. 종속성 Spring security 선택, pom 파일에서 복사해서

    - fastlms에 붙여넣기

    -애플리케이션 실행하면 시큐리티 패스워드가 뜬다.

 

  - 로컬 접속 - 위의 패스워드 입력해야 로그인이 가능하다.

 

    - 시큐리티 Config 클래스 추가, 주소에 대한 권한 설정

      -> antMachers:  '/' => 루트 페이지, '/**' => 루트 및 모든 페이지

      -> 로그인 없이 접속 가능해진다.

html
열기

 

===============================오류===================================

  - 오류: 로그아웃 다음에 다시 로컬 접속하면 바로 메인 페이지가 떠야하는데 로그인 페이지가 뜬다.

  - 원인:  http.authorizeHttpRequests()  가 아니라 http.authorizeRequests()로 고친다. 

 

   - 실행 구성 설정

 

    - 아래 처럼 실행 / 디버그 설정한다.

 

    - 메인 페이지 - 회원 정보 페이지 만든다.

 

    - 컨트롤러 내용 추가

java
열기

 

    - 멤버인포 html 파일 추가

html
열기

 

    - SeucurityConfig 에 루트 페이지, 회원 가입 페이지, 계정 활성화 페이지 세 개는 로그인 없이 접근 되도록 만든다.

html
열기

 

    - 로그인 페이지도 설정 가능하다.

      -> failureHandler(null): 

 

    - SimpleUrlAuthenticationFailureHandler를 상속받는 클래스도 만든다.

java
열기

 

     - 시큐리티 컨피그 

      -> 메서드 get 추가

      -> 상속해야 userDetailsService()에 멤버서비스를 넣었을 때 오류가 안 난다.

java
열기

 

    - Impl 클래스 

java
열기

 

     - 시큐리티 컨피그 클래스

      -> 패스워드 인코더를 받아서 auth에다가 주입해준다.

      -> 회원가입 할 때 패스워드를 지정해줘야한다.

java
열기

 

    - 컨트롤러에서 로그인 페이지를 만든다. get 이랑 post 모두 받을 수 있도록 @RequestMapping

java
열기

 

  Ex)

   - 로그인 페이지

       -> username은 변수이름? 어디에서??

html
열기

 

 

=================================== 오류 ====================================

    - 오류: 로컬 루트 페이지 접속하는데 로그인 페이지가 나온다.

    - 추측한 원인:  SecurityConfiguration에서 failureHandler(getFailureHandler()) <= 매개변수를 안 넣어줬다. => 이게 문제 가 아니었다.

      -> SecurityConfiguration에 메서드를 잘못 넣었다. (위에 씀)

 

    - SecurityConfig

     -> csrf()를 넣으면 보안적 이슈 있으나 작동하지 않도록 잠시 넣는다.

java
열기

 

<재부팅>

=========================오류========================

    - 오류:  로그인 정보를 입력하면 강사님처럼 request method 'POST' not supported가 나와야되는데 안 나온다.

    - 추측한 원인:  Sec Config에서 failureHandler(getFailureHandler()) <= 매개변수를 안 넣어줬다.

 

  - UserAuth ,.,,,  추가

java
열기

 

    - 로그인 페이지

      -> 여디서 "errorMessage"라는 이름의 변수는 로그인 페이지가 변수를 넘겨받는건가? 어디서?

html
열기

 

    - 시큐리티 컨피그에 로그아웃 내용 추가

    -> 따로 html 파일을 넣지 않아도 세션을 초기화하고 루트 페이지로 돌아가게끔 만든다. ("/member/logout")

      -> index 페이지에서 logout 이 걸려있기 때문이다. <a = href>

java
열기

 

    - 로그아웃 눌렀을 때 화면  - 확인하기

 

 

    Ex) 이메일 인증을 완료한 사람만 로그인 가능하도록 하려면??

 

    - 다음과 같이 인증받지 않은 계정도 있다.

 

    - 예외도 새롭게 추가한다.

     -> 런타임 을 상속받아야 문제 없다. 

java
열기

 

    - 그럼 failHandler 쪽으로 예외가 떨어진다.

 

    - 회원 로그인 창에서 이메일 인증 받지 않은 정보를 입력하면?

 

    - 디버깅 모드

      -> InternalAuthenticationServiceException 발생한다.

 

   - UserAuth

    -> 예외 이름을 알았으니 넣어준다.

java
열기

 

    - 인증 받지 않은 이메일로 로그인을 시도하면?

    - 이메일 로그인해서 이메일 인증을 해준다.

 

    -활성화 되면 활성화 되었다는 알림창이 뜬다.