일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 빈 충돌
- JavaScript
- infcon 2024
- 전략패턴 #StrategyPattern #디자인패턴
- Spring multimodule
- 파이썬
- DesignPattern
- 취업리부트코스
- 1주일회고
- 개발자부트캠프추천
- jwttoken
- Python
- TiL
- @FeignClient
- 인프콘 2024
- 커스텀 헤더
- 개발자 취업
- 구글 OAuth login
- 프로그래머스 이중우선순위큐
- 디자인패턴
- jwt
- spring batch 5.0
- 프로그래머스
- 항해99
- 단기개발자코스
- 코딩테스트 준비
- 빈 조회 2개 이상
- KPT회고
- 99클럽
- 디자인 패턴
- Today
- Total
목록백엔드 with java/spring (11)
m1ndy5's coding blog
JWT 로그인을 공부하고 구현하면서 Refresh Token의 필요성, 저장 위치와 같은 의문점이 들어 정리하는 글이다. Refresh Token이란?JWT 토큰은 사용자의 신원이나 권한의 정보를 담고 있는 토큰이다.따라서 사용자는 이 JWT 토큰을 사용하여 안전하게 통신할 수 있다.하지만 이 토큰의 가장 큰 문제점은 탈취를 당할 수 있다는 것이다!!해커가 토큰을 탈취해 서버에 접근한다면 서버 입장에서는 토큰의 주인이 접근한다고 생각할 것이다.만약 이 토큰에 유효기간이 없다면 해커는 언제고 이 탈취한 토큰을 가지고 멀쩡한 사용자 행세할 것이다!이를 막기 위해 토큰의 유효기간을 짧게 두고, 토큰의 유효기간이 끝나면 Refresh Token을 가지고 새로운 토큰 발행을 요청한다. 동작 과정로그인 성공 -> ..
프론트없이 JWT 토큰을 사용한 로그인을 구현하던 중에 겪었던 문제들과 고민들에 대해서 정리해보려고 한다!일단 기술 스택으로는 Spring boot 3.2, Spring Security 6.2, Spring Gateway 4.1을 사용하였다. 현재 진행하고 있는 프로젝트는 멀티모듈 구조이기 때문에 로그인 후 토큰 발급(인증)은 User Module에서 진행하고, 각 요청의 토큰 검증(인가)은 Gateway Module에서 진행하게 설계했다. 가장 먼저 문제를 겪었던 부분은 로그인이 성공한 후에 SimpleUrlAuthenticationSuccessHandler의 onAuthenticationSuccess 메서드에서 토큰을 발급하고 메인페이지로 리다이렉트해주는 부분이었다.구현하고자 했던 로직은 로그인 성공..
스프링을 공부하다 보면 Setter 사용하지 마세요라는 말은 귀에 딱지 앉게 들어봤을 것이다. 이제부터 그 이유를 알아보자! 1. 의도를 파악하기 힘듦 member.setName("minsung"); member.setAge(20); setter로 값을 변경하게 됐을 때는 왜 이 값을 변경했는지 setter 코드만 봐서는 유추가 힘들다. 이게 새롭게 값을 넣어주는 것인지, 기존의 값을 바꿔주는 것인지 한눈에 알기 쉽지 않다. 예를 들어보자 public void updateAge(int age){ this.age = age;} setAge보다 더 직관적인 메서드명을 가지고 있다. 이 메서드를 사용한다면 아 기존의 age를 바꿔주는구나라고 더 직관적으로 이해가 가능하다. 2. 객체의 일관성을 유지하기 힘듦 ..
프로젝트를 진행하던 중 궁금한 점이 생겼다. Post라는 게시글 Entity가 가지고 있는 필드는 postId: 포스트 아이디 member : 작성자 title: 게시글 제목 content: 게시글 내용 likes: 좋아요 개수 createDate: 작성 일자 updateDate: 수정 일자 이렇게 가지고 있었다. 이에 따라 게시글을 조회하는 컨트롤러에서 귀찮게 DTO를 만들지 않고 그냥 Post Entity자체를 응답으로 내려줘도 되지 않을까? 라는 생각을 해서 주변 개발자분들께 여쭤봤고 욕을 먹었더라는(?)ㅋㅋㅋㅋㅋ 나와 같은 생각을 가지고 있을 꼬꼬마 개발자분들께 왜 굳이 DTO로 반환하는지에 대한 글을 공유하려고 한다! 일단 글에 들어가기 앞서 DTO가 무엇인지부터 알고 가보자 DTO란? Data..
... 증말 이 문제로 몇시간은 헤맨 것같다,,,ㅎ 문제의 시작부터 차근 차근 따라가보자,,,, 먼저 프로젝트에는 2가지의 @Configuration 파일이 있었다. package hello.core; import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDisscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberRepository; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import hello.core.mem..
UserDetail Spring Security에서 사용자의 정보를 담는 인터페이스 @Data public class PrincipalDetails implements UserDetails{ private static final long serialVersionUID = 1L; private User user; public PrincipalDetails(User user) { this.user = user; } // 권한 : 한개가 아닐 수 있어서 Collection 타입으로 return @Override public Collection
프로젝트를 진행 중에 굉장히 난감한 문제를 겪었다. 문제는 아래와 같다. // 댓글 다는 DTO @Data public class PostCommentReq { private final Long accountId; private final String content; } // 댓글 수정 DTO @Data public class PatchCommentReq { private final String content; } 댓글 다는 DTO는 전혀 문제가 없이 잘 작동을 했지만 댓글 수정 DTO는 제대로 된 값을 계속해서 못받아오는 상황,,,!!! 일단 @Data 가 무엇인지 살펴보자! * Equivalent to {@code @Getter @Setter @RequiredArgsConstructor @ToStri..
정적 컨텐츠 파일을 그대로 web browser에 전달해주는 것 /resources/static에 html파일을 만들고 그대로 보여주는 것 파일명 그대로 url을 들어오면 됨 ex)주소/hello-static.html 프로그래밍할 수는 없음 처음에 컨트롤러로 들어왔을 때 매칭되는 컨트롤러가 없으면 resources/static에 들어가서 있는 html화면을 띄워줌. MVC와 템플릿 엔진 html을 그냥 주는 것이 아닌 서버에서 프로그래밍 하고 return MVC : Model, View, Controller parameter를 넘길 때 예시 //localhost:8080/hello-mvc?name= @GetMapping("hell-mvc") public String helloMvc(@RequestPara..
/src/main/resources/static에 index.html파일을 만들면 서버를 실행했을 때 index.html에 들어가 있는 내용들이 나온다. https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-webflux-welcome-page It first looks for an index.html file in the configured static content locations. -> static에서 index.html을 먼저 찾는다. 메뉴얼에서 검색하는 방법을 알아두면 좋다. /hello.hellospring/controller/HelloControlle..
내가 Spring Web, Tymeleaf 만 다운받았는데도 External Libraries에 들어가면 굉장히 많은 초면인 라이브러리들이 들어있는 것을 볼 수 있다. 이유는? 바로 빌드 관리 도구들(Gradle, Maven)이 필요한 라이브러리들 즉, 의존관계가 있는 라이브러리들을 전부 끌어와준다. Springboot libraries spring web tomcat : 웹 애플리케이션 서버(WAS)로서, 자바 서블릿을 실행하고 JSP(Java Server Pages)가 포함된 웹페이지를 만들어줌. spring-webmvc : 웹 애플리케이션을 개발하는데 사용할 수 있는 Model-View-Controller 아키텍처 및 준비된 요소를 제공 thymeleaf : View Templete Engine으로..