Spring boot kim's Shop/로그인

Springboot Jwt+로그인!(1) with successfulAuthentication/unsuccessfulAuthentication

디비드킴 2021. 7. 27. 22:02

회원가입을 했으니

로그인을 만들어보자!

 

이전에 만들었던 거에서 조금 바꿔보자!

https://cordingmonster.tistory.com/95?category=1035704 

 

Spring boot Jwt토큰 검증하기!(1) with BasicAuthenticationFilter

요청이 오면 시큐리티는 BasicAuthenticationFilter로 보내는 거 같다 왜냐면 테스트를 해봤는데 모든 페이지 이동시 이 필터가 걸려있는 쪽으로 온다 1.jwtAuthorizationFilter 만들기 헤더 검사 if(request.get..

cordingmonster.tistory.com

 

JwtLoginFilter

JwtLoginFilter.java

이전과 다른 건 없고 

딱하나 추가 했다

chain.doFilter(requestresponse);

 

로그인 실패 시

실행되는 함수를 만들자

JwtLoginFilter.java

자체적으로 제공해주는 함수이고

chain이 없으니 

다른 방법으로 보내주자

1번

request.getRequestDispatcher("/login").forward(requestresponse);

2번

RequestDispatcher dp=request.getRequestDispatcher("/login");

dp.forward(requestresponse);

 

1번은 이번에 처음 알게 된 거고

2번을 난 자주 사용했다 

 

restcontroller

restcontroller.java

http://localhost:8080/login으로

로그인 요청을 하면

JwtLoginFilter을 지나

성공하든/실패하든

여기로 오게 된다 

 

userService

userService.java

로그인에 성공했다면

시큐리티 필터에 주입이 됐을 것이다

 

시큐리티 필터를 확인한다

String email=SecurityContextHolder.getContext().getAuthentication().getName();

 

없다면=null이라면 예외가 

일어난다 그러면 캐치로 가게 된다

 catch (Exception e) {

        return failLogin();

  }

 

근데.. 굳이 왜 함수를 만들었지..?

이따가 doLogin안으로 그냥 넣어주자!

 

아 원래

AuthenticationException이용해서

뭔가 return을 해주려고 했는데

이미 지정 자료형이 void여서 

다른 방식으로 구현했다!

 

js

js

성공했다면 

리다이렉트를 해주고

if(result.bool){
         jwt=xhr.getResponseHeader('Authorization');
            localStorage.setItem('Authorization', jwt);
            window.location.href = 'http://localhost:3030/kim_s_Shop/index.jsp';
         return;
         }

실패했다면 

메시지를 띄어주자

alert(result.message);

 

이거 진짜 까먹지말자

xhr.withCredentials = true;

 

테스트

 

틀린 비밀번호 입력 

http://localhost:3030/kim_s_Shop/loginPage.jsp

존재하지 않는 이메일 입력

http://localhost:3030/kim_s_Shop/loginPage.jsp

맞는 이메일+맞는 비번 입력

http://localhost:3030/kim_s_Shop/index.jsp
http://localhost:3030/kim_s_Shop/index.jsp

 

리다이렉트 성공!

리프레시 토큰+액세스 토큰 받기 성공!

 

아이디/비밀번호 

찾기를 구현해보자!