스프링 공부/게시판 프로젝트 만들기 37

[스프링] 7. JWT를 구현하기. 1단계: 일단 JWT를 위한 토큰을 만들자. (1)

기본적인 스웨거와 CORS에 대한 처리를 완료했다. 이제 JWT(Json Web Token)를 만들어주고, 멤버 로직을 짜기 시작해야 한다. JWT를 정리한 내 순서는 TokenProvider, TokenDto 예외처리들 JwtFilter Filter를 SecurityConfig에 넣기 의 과정으로 정리할 것이며, 일단 토큰에 대해서 코드를 정리해봐야 겠다. 그럴려면, 일단 토큰이 있어야지! @Getter @NoArgsConstructor @AllArgsConstructor @Builder public class TokenDto { private String grantType; private String accessToken; private String refreshToken; private Date a..

[스프링] 6. SecurityUtil 예외처리를 커스텀 해보자(부제: 2단계, 리스폰스를 이용해 예외처리하기)

이렇게 예외를 따로 만들었으며, 이를 통해 예외처리를 조금 더 직관적이게 만들 수 있었다. 일단, 이전에 만들었던 것을 어떻게 이용할 것인가? Exception이라는 것은 결국, Response에서 요청에 대해 실패했음을 알려주어야 한다. 결국, Response.failure를 반환하게 되는 것이다. 이를 어떻게 활용하는 것일까? @RestControllerAdvice public class ExceptionAdvice { @ExceptionHandler(NeedToLoginException.class) @ResponseStatus(HttpStatus.NOT_FOUND) public Response needToLoginException(){ return Response.failure(403, "인증이 되..

[스프링] 5. SecurityUtil 예외처리를 커스텀 해보자(부제: 1단계, Response만들어주기)

public static Long getCurrentMemberId(){ Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if(authentication == null) throw new NeedToLoginException(); if(authentication.getName() == null) throw new NotRightAuthenticationException(); return Long.parseLong(authentication.getName()); } 이전의 SecurityUtil에서 이렇게 만들어, 각 에러 상황에 대해 다른 결과로 예외를 만들기 위해 코드를 조금 다듬었다. 일단 우..

[스프링] 4. SecurityConfig에 대한 유틸 추가하기

저번 게시글까지 SecurityConfig를 만들고, 이에 대해 간단한 설정을 해두었다. 문제는, 모든 과정이 시큐리티 필터 체인에 맞게 돌아가지 않을 수 있다. 사진을 보면 인증정보, 즉 Authentication은 SecurityContextHolder에서 SecurityContext를 찾아, 그 속에서 Authentication을 가져와 확인하게 된다. 즉, 우리(서버)가 사용자(클라이언트)에게 토큰을 주었을 때, 그 토큰을 그대로 저장하는 것이 아닌, 그 토큰에서 우리가 필요한 정보를 가져와 이를 확인하는 방식이다. 또한, 이 토큰은 암호화되어있는게 기본적인 약속이다(털리면 위험하니까) 그렇다면, 우리는 토큰을 검증할 때 어떻게 해야할까? 복호화 -> 필요한 정보 가져오기 -> 정보가 있는지 확인..

[스프링] 3. swagger ui 적용시키기(2)

현재까지 따라왔다면, 바로 실행하면 이상한 과정을 거치게 된다. 1. 로그인이 생겼다 이렇게 로그인이 생겼는데, 이는 Spring Security에서 기본적으로 제공하는 로그인 기능으로, 여기에 아이디와 비밀번호를 쳐야한다. 근데 회원가입을 안했잖아?? 요런식으로 콘솔을 찾아보면 비밀번호가 알려지는데 아이디에 user, 비밀번호에 여기 부분을 붙여넣으면 된다. 그러면 되냐고? 안된다. 이 부분을 조금 더 설명을 해야할 것 같다. Swagger UI를 우리가 쓰는 이유는, API 명세서를 자동으로 만들어줄 수 있다는 장점이 있고, 조금 더 정리된 상태에서 내가 만든 기능들을 확인할 수 있기 때문이다. 그런데 Spring Security는 우리가 설정하지 않으면, 만들어둔 프로젝트의 모든 페이지를 보안화시킨..

[스프링] 2. swagger ui 설정하기(1)

일단 Swagger 를 써야하는 이유에 대해 간단히 생각해보고 코드를 정리해야겠다. swagger는 api를 정리해서 관리하고, 확인하기 편하게 해준다. swagger ui를 통해 url 주소에서 적혀있는 path와, 요청의 method들을 정리해 보여준다. 이를 통해 내가 만든 페이지가 어떻게 되어있고, 분류나 기능들을 한번에 볼 수 있다. 코드를 정리해보자면, 계층적으로는 api apiInfo apiKey securityContext defaultAuth 로 이루어져 있으며, 코드는 아래와 같다. @Import(BeanValidatorPluginsConfiguration.class) @Configuration @EnableWebMvc // http://localhost:8080/swagger-ui/i..

[스프링] 1. CORS 설정해주기

일단 프로젝트를 만들 때, 버전 2.7.0에 자바는 버전 11로 맞추어주었다. 주변에서 듣기로는 제일 실무에서 많이 쓰인다고 들었기 때문이다(소문) implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.projectlombok:lombok:1.18.22' implementation 'mysql:mysql-connector-java' compileOnly '..