![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ROffp/btssAF8Aye9/VR31GheO6cXmAX2Ef1OQvK/img.png)
Introduction 스프링 부트로 프로젝트를 진행하던 도중, 분명 레포지토리 클래스 위에 @Repository 어노테이션을 붙였는데 레포지토리 클래스를 찾을 수 없다는 문구와 함께 에러가 발생했다. 오류 내용 이 문제를 해결하고자 'debug' 옵션과 함께 다시 실행해보았다. logging: level: root: WARN org: springframework: web: DEBUG hibernate: ERROR application.yml 파일에 위 코드를 추가해주었다. 발견한 원인 로그에서 발견한 내용은 사실상 'debug' 옵션을 켜기 전과 같은 설명을 하고 있었다. 아래는 쓰여 있던 내용이다. No qualifying bean of type 'com.example.fcmproject.reposi..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/KbQe5/btrVtGkLFND/k8wzQIKC5nSvfZK4y0hWZk/img.png)
📃 Introduction 프로젝트에서 스프링 시큐리티를 적용해 기본적으로 모든 API 경로는 인증 절차를 거치게 하고, 회원가입과 로그인을 포함한 몇몇 API 는 인증이 없이 호출이 가능하도록 변경해야 했다. 모든 API 가 인증 절차를 거치게 하는 것은 어렵지 않았으나, 몇 개의 API 가 인증이 없이도 호출되도록 변경하는 것이 까다로웠다. 🚩 현재 상황 아래는 현재 보안 필터 체인의 구성이다. 각각 회원가입과 로그인을 나타내는 POST /api/v1/user/join 과 POST /api/v1/users/login 을 antMatchers 의 permitAll() 메서드를 활용해서 인증 절차가 필요하지 않게 설정해주었다. 문제는 GET api/v1/posts/** 또한 인증 없이 호출되게 설정했다는..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bGVNLw/btrUDhUeuU4/ZvfmABMIDuD3Vyw1FSwZr1/img.png)
Configuration 클래스에서 HandlerExceptionResolver 주입하기 기존 SecurityConfig 클래스에 다음 두 줄을 추가한다: private final HandlerExceptionResolver exceptionResolver; public SecurityConfig(@Qualifier("handlerExceptionResolver") HandlerExceptionResolver exceptionResolver) { this.exceptionResolver = exceptionResolver; } 그리고 기존에 JwtAuthenticationFilter 는 매개 변수로 비밀 키만 받고 있었는데, 필드 변수로 생성된 exceptionResolver 도 받도록 변경한다. 보안 ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/8LFBy/btrSZS2PAe2/jhaDFqEtD5m7ujR6lKOXuk/img.png)
💡 Introduction 이번 포스트에서는 스프링 부트 핵심 가이드 책에서 나온 Spring Security 를 사용해 토큰 인증을 구현하는 과정을 내가 구현한 순서에 따라 설명해본다. 🧾 단계별로 클래스 생성하기 먼저, 컨트롤러를 생성한다. 컨트롤러는 아래와 같이 토큰을 생성해서 토큰을 반환한다. 빨간색으로 나온 JwtTokenProvider 를 생성해주자. 그리고 내부에 createToken() 메서드 구현 전에, 필요한 의존성이 있다: 이제 준비가 되었으니, JwtTokenProvider 를 구현해본다. 클래스 생성 후, JSON Web Token 라이브러리에서 제공하는 다양한 기능을 사용하여 토큰을 발급하는 기능을 createToken() 메서드에서 구현했다: 이 정도 시점에서 우선 어플리케이션..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dfLQA4/btrSC9Ej4Yy/anPHnzmEVNqu0M5IBKkKnk/img.png)
Abstract Spring Security 를 적용하고 컨트롤러 테스트를 했는데 에러가 발생했다. 403 에러였고, 찾아보니 클라이언트가 접근 권한이 없을 때 발생하는 forbidden 에러였다. 해결 먼저 Spring Security 적용 후에 컨트롤러 테스트를 하기 위해서는 테스트에서도 API 에 접근할 수 있어야 하므로 새로운 의존성을 추가해야 한다. 바로 spring-security-test 이다. 추가한 후에는 컨트롤러 테스트에서 MockMvc 클래스의 가짜 객체에 서비스의 의존성을 주입해 사용하여 post 요청을 보낼 때 .with(csrf()) 를 붙여주어야 한다. Note CSRF는 Cross-Site Request Forgery 의 줄임말로, 어떤 사이트에 로그인 된 유저들을 이용해서 ..
들어가기 전에 ResponseEntity 는 HttpEntity 를 상속받는 클래스로, 멤버변수로 HttpStatus 객체를 포함한다. 즉, API 로 클라이언트에게 응답할 때 HTTP 상태 코드와 HTTP 헤더를 함께 원하는 데이터를 전송할 수 있게 돕는 클래스이다. HttpStatus 클래스 HttpStatus 클래스에 대해 알아보기 전에, HTTP 에서 전달되는 정보에는 무엇이 있는지 살펴보겠다. HTTP 상태 코드 목록 간단하게 5개의 범위에서 상태 코드는 반환된다. 응답의 상태에 대한 정보를 전달 (예: 응답이 아직 진행중 - 102 Processing) (100 – 199) 성공적인 응답 (200 – 299) 리디렉션을 요청하는 응답 (300 – 399) 클라이언트의 오류 (요청할 때 잘못되었..
@RestController 도입 이전: model 을 사용해서 entity 를 model 에 addAttribute 해주었다. 그래서 View(화면)에 띄울 수 있었다. 이는 @Controller 는 MVC Controller를 사용하겠다는 의미이기 때문이다. 주로 결과값을 View 로 전달하는 방식이며, 함수의 리턴 값을 문자열 형태의 View 의 이름으로 지정해 반환하게 된다. 컨트롤러에서 View 를 거치지 않기 위해서는 바로 데이터를 @ResponseBody 에 넣어서 응답할 수 있었다. @RestController 도입 이후: JSON 형태 데이터를 앞단으로 보낼 수 있다. 엔티티 내에서 간단히 static 메서드 of 를 구현해서 entity 를 response body 화 해줄 수 있다. ..
- Total
- Today
- Yesterday
- json web token
- 알고리즘
- 지연 로딩
- 역직렬화
- 가상 서버
- @RequestBody
- DTO
- Firebase
- N+1
- 깃랩
- spring
- JPA
- 도커
- Jackson
- Spring Boot
- 인증/인가
- 프로그래머스
- JOIN FETCH
- FCM
- 실시간데이터
- gitlab
- JPQL
- 코테
- ci/cd
- LazyInitializationException
- DeSerialization
- docker
- Java Data Types
- 기지국 설치
- google cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |