23.09.16 항해 99 16기 주특기 프로젝트 2일차
오늘 공부한 것
* 주특기 프로젝트 로그인 페이지 구현
* 주특기 프로젝트 마이페이지 조회 구현
* Refresh Token 특강
- 회원가입/로그인
[ ] 회원가입 기능완료[ ] 로그인 기능[ ] JWT filter / 토큰 쿠키로 전달.
- MY PAGE
[ ] 마이페이지 조회
로그인 페이지를 구현할때 Filter를 사용해보기로해서 만들었는데
Filter 사용 이후 회원가입과 로그인 모두 " 토큰을 찾을 수 없습니다 " 라는 예외가 나오기시작했다.
기능적인 문제 인가 코드를 살펴보았지만 아무리봐도 문제가없어보여서 오타를 몇개 찾아내서 수정했지만
소용이 없었다.. 결국 페어분께 함께 봐달라고 부탁드렸고 바로 찾을 수 있었다
아래 코드에서 이 부분이었던 것을
(url.startsWith("/api/user") || url.startsWith("/css") || url.startsWith("/js"))
이렇게 바꾸니까 되었다 결국 Url 이 controller 와 일치하지 않아서 생기는 문제였다
매번 위의 Url 로 하다가 버릇처럼 그대로 입력했던 것이다 이런 실수는 하지 않도록해야겠다
(url.startsWith("/api/signup") || url.startsWith("/api/login") || url.startsWith("/css") || url.startsWith("/js"))
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String url = httpServletRequest.getRequestURI();
if (StringUtils.hasText(url) &&
(url.startsWith("/api/signup") || url.startsWith("/api/login") || url.startsWith("/css") || url.startsWith("/js"))
) {
// 회원가입, 로그인 관련 API 는 인증 필요없이 요청 진행
chain.doFilter(request, response); // 다음 Filter 로 이동
} else {
// 나머지 API 요청은 인증 처리 진행
// 토큰 확인
String tokenValue = jwtUtil.getTokenFromRequest(httpServletRequest);
if (StringUtils.hasText(tokenValue)) { // 토큰이 존재하면 검증 시작
// JWT 토큰 substring
String token = jwtUtil.substringToken(tokenValue);
// 토큰 검증
if (!jwtUtil.validateToken(token)) {
throw new IllegalArgumentException("토큰 에러");
}
// 토큰에서 사용자 정보 가져오기
Claims info = jwtUtil.getUserInfoFromToken(token);
Member member = memberRepository.findByEmail(info.getSubject()).orElseThrow(() ->
new NullPointerException("이메일을 찾을 수 없습니다")
);
request.setAttribute("member", member);
chain.doFilter(request, response); // 다음 Filter 로 이동
} else {
throw new IllegalArgumentException("토큰을 찾을 수 없습니다");
}
}
}
이후에는 마이페이지 조회 기능을 구현했다
사실 이건 구현하고 어떻게 테스트를 해야할지 몰라서 나중에 프론트와 합친 후 확인 하기로 했다
저녁에는 Refresh Token 에 대한 특강이 있었다
간단한 정의와 예제코드를 보면서 특강이 이어졌다
나중에 코드도 주신다고했으니 받으면 잘 복습해봐야겠다
Refresh Token Access Token의 유효기간을 짧고, 자주 재발급 하도록 만들어 보안을 강화하면서 사용자에게 잦은
로그아웃 경험을 주지 않도록하는 것
Access Token 은 리스소에 접근하기 위해 사용되는 토큰이라면 Refresh Token은 기존에 클라이언트가
가지고 있던 Access Token 이 만료되었을 때 새로 발급받기위해 사용함