목록2024/01 (27)
쌓고 쌓다
에러 메시지를 보다 깔끔하게 관리하고 응답으로 보낼 수 있는 방법으로 Enum 타입이 있다. 먼저 Enum 타입을 보자. ErrorCode package com.example.spotserver.exception; import lombok.Getter; import org.springframework.http.HttpStatus; @Getter public enum ErrorCode { DUPLICATE_LOGINID(HttpStatus.CONFLICT,"중복된 아이디가 존재합니다."), DUPLICATE_NAME(HttpStatus.CONFLICT, "중복된 닉네임이 존재합니다."), FAIL_LOGIN(HttpStatus.UNAUTHORIZED, "아이디 또는 비밀번호를 잘못 입력했습니다."), NO..
API 서버를 만들며 유효성 검사와 예외 응답에 대한 방법을 고민하다가 생각해낸 방법이다. 먼저 유효성 검사를 쉽게하기위해 spring-boot-starter-validation를 build-gradle에 추가해주자. implementation 'org.springframework.boot:spring-boot-starter-validation' 유효성 검사 간단하게 입력하지 않은 경우의 유효성 검사만 보이겠다. 그 외 다양한 유효성 검사 어노테이션은 찾아보길! 먼저 회원가입시 컨트롤러에서 MemberRequest를 파라미터로 받는다. MemberRequest 클래스는 다음과 같으며 미입력을 방지하고자 미입력을 검사할 필드에 @NotEmpty 어노테이션을 붙인다. @ToString @Setter publ..
Entity 자체를 요청과 응답을 처리하는데 그대로 사용하니 다음과 같은 문제 또는 비효율적인 부분이 발생했다... 먼저 회원 엔티티를 보자. @Entity @Data public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String loginId; private String loginPwd; private String name; @Enumerated(EnumType.STRING) private Role role; @CreationTimestamp private LocalDateTime regDate; @Enumerated(EnumType.STRING) private Memb..
https://school.programmers.co.kr/learn/courses/30/lessons/181187 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 1사분면의 점들의 개수를 구해 *4를 해주면 모든 점들의 개수를 구할 수 있다. 작은 원과 큰 원 사이의 점들을 구하기 위해 원의 방정식을 사용한다. x는 1부터 r2까지 반복문을 돌리며 각 원의 높이 y를 구한다. 구한 y를 각각 내림과 올림을 해준다. r1 ceil, r2 floor 하는 이유 : r1보다 크거나 같고 r2보다 작거나 같은 구간의 정수를 구해야하기 때문에 r1을 올..
"/login"으로 로그인을 시도하여 System.out.println("로그인 시도한 pwd = " + member.getLoginPwd()); String encodePwd = bCryptPasswordEncoder.encode(member.getLoginPwd()); System.out.println("로그인시 입력한 비밀번호를 인코딩한 결과 = " + encodePwd); 인코딩된 비밀번호 로그를 출력해보았다. 로그인 시도한 pwd = 1234 로그인시 입력한 비밀번호를 인코딩한 결과 = $2a$10$Jr8A352R8VZcfnN/SP5vCubnL2TZSUm4FSNioawR.VZ5X7i2kvldu 로그인 시도한 pwd = 1234 로그인시 입력한 비밀번호를 인코딩한 결과 = $2a$10$Vf/peA..
컨트롤러에서 인증된 회원 정보를 어떻게 받아서 게시글을 쓰고 수정하고 삭제 등등을 할까? 싶었다. 다음과 같은 방법이 있었다. 1. SecurityContextHolder에서 꺼내기 @GetMapping("/get1") public String get1() { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); PrincipalDetails principal = (PrincipalDetails) authentication.getPrincipal(); TestUser testUser = principal.getTestUser(); System.out.println("[1] testUser = " + t..
Authentication(인증) : 누구인지 확인하는 절차로 실제 사용자가 맞는지 로그인하는 과정이라고 생각하면 된다. Authorization(권한부여) : 인증된 사용자에 대해 특정 리소스에 접근이 가능한 권한을 부여하거나 확인하는 과정이다. build.gradle implementation group: 'com.auth0', name: 'java-jwt', version: '4.4.0' JwtProperties.java package com.example.spotserver.config.jwt; import org.springframework.beans.factory.annotation.Value; public class JwtProperties { @Value("${jwt.secrectKey}"..
JWT는 서명된 토큰에 중점을 둔다. 즉, JWT 토큰은 내가 쓴게 맞어라는 서명의 용도로 사용하는 것이다. Authorization에 사용 사용자가 성공적인 로그인한 이후에 우린 JWT 토큰을 응답으로 준다. 사용자는 이 토큰을 가지고 허용된 리소스에 접근할 수 있는 것이다. JWT 구조 JWT는 3 파트로 나눠지며 각 파트는 . 으로 구분된다. xxxxx.yyyyyy.zzzzz 구조를 갖는 것이다. 다음은 3 파트를 설명한다. 1. Header 보통 서명에 사용된 알고리즘과 토큰 유형을 갖는다. { "alg": "HS256", "typ": "JWT" } 이 내용 JSON은 Base64Url로 인코딩되어 JWT의 첫번째 부분을 차지한다. 2. Payload Playload는 Claim을 포함한다. 나중..