본문 바로가기

Web/Spring9

[Spring Security] jwt RefreshToken 구현하기 프로젝트를 수행하던 중 access token만으로는 사용자에게 편리한 로그인을 제공하기가 어려움을 느끼게 되었다 가장 크게 느낀 이유론 access token 특성상 지속시간이 짧기 때문에 만료되면 짧은 주기로 이용자가 다시 로그인해야 하는 불편함이 생기는 것이다. 이를 해결하기 위해 refreshToken을 구현해야겠다고 생각하게 되었고 그 과정을 정리해 보았다. refreshToken 전체로직 처음에는 아래와 같은 전체로직으로 구현을 생각하게 되었다 나는 사실 구현하다보니 여러가지 방법이 있는 것을 알게 되었고 굳이 refreshToken을 취약하게 외부에 드러낼 필요가 없다고 생각이 들어서 아래와 같은 로직으로 구현하게 되었다 즉, 만료된 accessToken을 받았을 때 해당 accessToke.. 2024. 1. 29.
[Spring Security] 스프링 시큐리티 에러 메시지 국제화 해당 게시글은 "프로그래머스 데브코스 4기"의 팀 내 프로젝트 기록용으로 TECH BLOG에 직접 작성한 글입니다. [문제 상황] 팀원이 작업하시면서 이런 문제가 발생했다고 하셨다! 그래서 직접 확인해 보니 로컬에서는 비밀번호를 잘 못 입력했을 때 “자격 증명에 실패하였습니다.” 였고 서버에서는 위와 같이 “Bad credentials”로 응답이 왔다.. 왜 그럴까 생각을 해보았는데에.. 계속 보니 로컬에서 오는 응답과 서버에서 오는 응답 이 둘의 의미가 같은 것 같았다. 그래서 어림짐작으로 로컬은 한국이고 서버는 영어로 되어있나..? 싶었는데 역시 맞았다 → 근거는? 위 블로그를 보면서 “이는 Spring Security 자체에 국제화 메시지 처리가 되어 있기 때문” 이라는 말을 보았고 해당 파일을 직.. 2023. 12. 14.
[Spring Security] jwt 401 응답 + jwt 예외 핸들러 만들기 일단 security 예외는 사용자가 만든 spring 핸들러에 걸리지 않는다 이유는 security가 spring이 실행되기 전보다 먼저 실행되기 때문이다.. 사용자가 만든 핸들러는 spring에 걸려있고 security가 그것보다 더 전에 실행하기 때문에 걸리지 않는다 위 그림처럼 Filter가 Request의 가장 앞단에 위치해있고 HnadlerInterceptor가 controller단에 존재한다 이래서 이 게시글을 작성하기 전까진 jwtFilter에서 발생하는 요런 에러들이 GlobalHandler에 잡히지 않았다 (사실 Spring의 GlobalHandler에 잡히는 줄 알았고 코드 문제로 동작이 안 하는 줄 알았다..._) 그래서 겸사겸사 위와 같은 문제들까지 다 해결하기위해 해당 게시글을 .. 2023. 11. 29.
[Spring Security] @AuthenticationPrincipal에 null값 들어오는 문제 해결 방법 https://devjem.tistory.com/70 이 글 보고 참고했다 이 문제가 발생한 경우는 “회원 정보 수정” 기능에 User를 @AuthenticationPrincipal로 가져와야 하는건데 자꾸 나의 User가 null으로 받아와지지 않았다 ㅠㅠ 글을 쭉 읽으면서 security 코드를 천천히 비교하며 보는데 ! 내 경우의 문제는 CustomUserDetailsService의 loadByUserName 함수가 email으로 되어 있어서 그런 것이라고 처음에 접근했다 근데 사실 유저의 바뀌지 않는 값은 email이 맞으니 해당 함수는 문제가 없었다. 그래서 loadUserByUserName의 내부 findByEmail 메소드를 findByName 메소드로 변경했다 근데 findByName으로 .. 2023. 11. 16.
[인프런] 스프링부트 개념정리(이론) - 1 해당 내용은 https://inf.run/xFxo 를 참고하여 작성되었습니다. 2편은 velog에 정리 했습니다. https://velog.io/@pnk7038/Inflearn%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC%EC%9D%B4%EB%A1%A0- [Inflearn|인프런] 스프링부트 개념정리(이론) - 2 1편은 https://bestsu.tistory.com/m/60왜 벨로그에 쓰냐구..? 티스토리 복구가 아직도 안됐거든 😉 쓰다보니 벨로그가 더 좋은 것 같기도 .. ?톰캣을 설치할 필요없이 바로 실행이 가능하다.운영체제가 velog.io 스프.. 2022. 10. 5.
[3] 스프링부트로 웹 서비스 출시하기 - 3. SpringBoot & Handlebars로 화면 만들기 https://jojoldu.tistory.com/255?category=635883 3) 스프링부트로 웹 서비스 출시하기 - 3. SpringBoot & Handlebars로 화면 만들기 이번 시간엔 SpringBoot & Handlebars로 간단한 화면을 만들 예정입니다. (모든 코드는 Github에 있습니다.) Handlebars는 흔히 사용하시는 Freemarker, Velocity와 같은 서버 템플릿 엔진입니다. JSP는 서버 템플.. jojoldu.tistory.com 본 내용은 위의 출처를 바탕으로 합니다. 이번 시간은 Spring Boot & Handlebars 로 간단한 화면을 만듭니다. Handlebars는 Freemarker, Velocity와 같은 서버 템플릿 엔진입니다.JSP는 .. 2022. 8. 13.
[JUnit4] 테스트 라이브러리 기본 사용법 참조:https://www.youtube.com/watch?v=tyZMdwT3rIY 작성일자 2022.08.05 사용 IDE : STS4 1. JUnit Test Case 생성 테스트의 클래스명 = 프로덕션 클래스 명 + Test 2. 테스트 케이스 작성하기 package calculrator; public class Calculator { int add(int i, int j) { return i+j; } int subtract(int i, int j) { return i-j; } int multiply(int i, int j) { return i*j; } int divide(int i, int j) { return i/j; } } Calculator.java STS, eclipse라인 삭제(Windo.. 2022. 8. 5.
[2] 스프링부트로 웹 서비스 출시하기 - 2. SpringBoot & JPA로 간단 API 만들기 출처: https://jojoldu.tistory.com/251?category=635883 spring boot와 jpa를 통해 간단한 API를 만들어보자. spring boot&JPA로 진행하게 되면 집중해야할 비즈니스 로직에만 집중할 수 있다. (Express, Django, Rails 못지않게 생산성이 좋음!) 작성일자 2022.07.22 1. 도메인 코드 만들기 src > main > java > com > webservice 에 domain 패키지를 생성해줍니다. 또, domain 패키지 아래에 posts 패키지를 생성해줍니다. 그리고 posts패키지 아래에 Posts 클래스, PostsRepository 인터페이스를 생성해주세요! 그럼 위의 사진처럼 구성되게 됩니다. test에도 위의 구성과.. 2022. 8. 1.
[1] 스프링부트로 웹 서비스 출시하기 - 1. SpringBoot & Gradle & Github 프로젝트 생성하기 https://jojoldu.tistory.com/250 1) 스프링부트로 웹 서비스 출시하기 - 1. SpringBoot & Gradle & Github 프로젝트 생성하기 많은 웹 서비스 구축하기 강좌들이 Python, NodeJS, Ruby, PHP만 다루고 있습니다. 국내에서 가장 많이 사용하는 언어인 Java로 웹서비스 구축 강좌는 본적이 없습니다. Java는 대부분 로컬에서 CRUD & localh jojoldu.tistory.com 본 내용은 위의 출처를 바탕으로 합니다. 혼자 학습하는 내용을 기록하는 것이므로 잘못된 내용이 있으면 지적 부탁드립니다. 이렇게 따라하며 학습할 수 있게 기회를 주셔서 감사합니다. 작성일자 2022.07.21 1. 새 프로젝트 생성 저는 intellj가 commnu.. 2022. 7. 21.