일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 리눅스
- resttemplate
- 처음 만나는 AI수학 with Python
- GIT
- 스프링부트핵심가이드
- 스프링 시큐리티
- merge
- 알파회계
- 코드로배우는스프링웹프로젝트
- 서버설정
- 네트워크 설정
- /etc/network/interfaces
- iterator
- 처음 만나는 AI 수학 with Python
- 데비안
- 자료구조와 함께 배우는 알고리즘 입문
- 페이징
- network configuration
- 자바편
- 친절한SQL튜닝
- 티스토리 쿠키 삭제
- 코드로배우는스프링부트웹프로젝트
- 이터레이터
- 병합
- 구멍가게코딩단
- Kernighan의 C언어 프로그래밍
- 깃
- 선형대수
- 자료구조와함께배우는알고리즘입문
- 목록처리
- Today
- Total
목록Projects/blog (53)
bright jazz music
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqpRLd/btr02AFNw9A/KEGXcwFljRxHOmy4cS4zwK/img.png)
- 테스트 케이스 개선 로컬에서 테스트 할 때는 굳이 암호화하여 테스트 할 필요 없으므로 평문을 사용하는 PasswordEncoder를 하나 더 생성하여 테스트 해볼 수 있다. 따라서 로컬에서 테스트 할 때는 평문을 사용하는 encoder를 주입하고, 운영에서는 암호화를 사용하는 encoder를 사용하는 것이다. 그렇게 하면 asserEquals()를 사용하여 테스트 할 수 있다. 1.PasswordEncoder 인터페이스 생성 //PasswordEncoder.java package com.endofma.blog.crypto; public interface PasswordEncoder { String encrypt(String rawPassword); boolean matches(String rawPas..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ckNUZg/btr0H8j7wq8/nzrYCLP8BKWGqUbS4vlKK0/img.png)
비밀번호가 평문에서 암호로 바뀌면서 기능하지 않는 것들이 있다. 예를 들면 아래와 같이 회원가입을 한 뒤에 평문을 넣어 로그인을 시도하면 실패한다. //AuthServiceTest.java @Test @DisplayName("로그인 성공") void test3(){ //given Signup signup = Signup.builder() .email("catnails@gmail.com") .password("1234") .name("catnails") .build(); authService.signup(signup); Login login = Login.builder() .email("catnails@gmail.com") .password("1234") .build(); //when authService..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b5sTpT/btr0RQoSXan/RREK44VS3Z9cjDrgJb77o1/img.png)
비밀번호 저장을 위해 Scrypto 알고리즘을 사용한다. Scrypto를 지원하는 다양한 라이브러리들이 존재한다. 이 프로젝트에서는 Spring security에서 지원하는 Crypto 라이브러리를 사용한다. https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/crypto/scrypt/package-summary.htm org.springframework.security.crypto.scrypt (spring-security-docs 6.0.2 API) package org.springframework.security.crypto.scrypt Classes docs.spring.io https:/..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2DgUn/btr0GKRxZWX/LZEq8ayeH6cnqJhBJVxOLk/img.png)
지난 포스팅에서는 jwt키를 application.yml에 넣어 놓고 불러와서 jwt암호화를 진행하는 과정을 다뤘다. 이번에는 회원 가입을 다룬다. 구체적으로는 아이디와 비밀번호를 입력 받고, 비밀번호를 암호화 해서 DB에 넣는 과정이다. - application.yml 수정(data.sql 입력 되지 않도록) 현재 어플리케이션을 구동하면 data.sql이 자동으로 DB에 입력되도록 되어 있다. 빈 DB 에 테스트 할 수 있도록 application.yml에서 sql 설정을 never로 변경해준다. 사실 이 과정은 오늘 진행할 내용과 관련 없다. 이제 기본적인 회원가입 기능을 만든다. 1. AuthController.java에 회원가입 메서드 생성하기 //AuthController.java //회원가입 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rA7ZK/btr0qYHKQxu/1z47yKG3qc5AtbWmYziOa1/img.png)
지난 번에는 application.yml에 정보를 넣어두고 그 정보를 AppConfig라는 클래스에 바인딩 시키는 과정을 실습하였다. yml의 문법을 사용하여 문자열, 숫자, 해쉬맵 뿐만 아니라 클래스 인스턴스에 바인딩하였다. yml에 정보 기재 AppConfig에 @ConfigurationProperties() +@Data 메인 클래스에 @EnableConfigurationProperties(바인딩 시킬 클래스) 이번에는 지난 번 포스팅의 내용을 참고하여 JWT를 생성하기 위한 key를 application.yml에 작성하고 그것을 AppConfig.java에 바인딩하여 사용하는 과정을 진행한다. private final String KEY = "Kz06PMZdP03FQVS3m8Jg9gKSEQjV4/N..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/rlV7h/btr0hdrDXL1/zl9dVi004OQXsGdkXRyiX1/img.png)
지난 번 포스팅에서는 jwt를 사용하여 암호화를 하고 그것을 세션으로 이용하는 내용을 다루었다. 따라서 UserController.java와 AuthResolver.java에 동일한 값의 특정 키를 가져와서 jwt를 암호화, 또는 복호화 하는 데 사용했다. AuthResolver.java에서는 복호화하는 데 사용했다. AuthController.java에서는 로그인을 하는 경우에 암호화 하였다. 세션의 경우 일반적으로는 모든 사용자가 같은 키를 사용하게 된다. 사용자별로 세션을 만들어 줄 때마다 키 값이 달라지는 경우 복호화 할 수 없기 때문이다. 키 값은 서버 어딘가에 위치해야만 한다. 지난 번 포스팅에서는 AuthController.java와 AuthResolver.java에 문자열 상수로 저장하였다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bKT4kS/btrZNv07Tpr/XiJ2KzP32uW0g8KBlmHHXK/img.png)
1. 사용할 JWT 라이브러리 선택 JWT.IO JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. jwt.io https://github.com/jwtk/jjwt GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and Android Java JWT: JSON Web Token for Java and Android. Contribute to jwtk/jjwt development by creating an account on GitHub. github.com 가장 사용자가 많은 라이브러리를 사용한다. ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/3Op8a/btrZxelQ5lO/iNslIcEB4Ka7e78AEMiJr1/img.png)
지난 번 포스팅에서는 회원이 로그인을 하면 토큰이 발급되고, 인증이 필요한 페이지로 이동하려 할 때 DB에서 해당 토큰을 검증하고, 이동한 후에는 해당 회원의 primary id를 출력해 주는 과정을 다루었다. //AuthController.java @PostMapping("/auth/login") public SessionResponse login(@RequestBody Login login){ String accessToken = authService.signin(login); return new SessionResponse(accessToken); } ### auth.http POST http://localhost:8080/auth/login Content-Type: application/json ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/GNnqh/btrZrcnBbPv/SpNvjVQ4w3HsbehNWqwm9k/img.png)
이 포스팅에서는 UUID를 통해서 세션 토큰을 발급받고 인증을 요청하는 부분을 진행한다. 로그인 - 토큰 발급 - DB를 통해서 인증을 확인한 뒤 - 인증 관련 페이지로 라우팅 - 로그인하면 응답에 토큰이 날아옴. - 이 토큰을 향후 게시글 쓰기 같은 인증이 필요한 페이지에 진입하기 위해, - header에 Authorization값으로 넣어준다. - 인증이 필요한 해당 요청했을 때 인증이 되고 해당 회원의 primary id를 출력해 준다. - 아마 숫자 1, 또는 2가 결괏값으로 나올 것이다. 0.현황 발급 받은 세션을 보내면 서버에서 검증하는 코드 작성. 현재는 WebMvcConfigurer에 등록한 AuthResolver(implements HandlerMethodArgumentResolver)를..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dswQK6/btrZop8YuI0/L8mshJKYnpdKTutRqo3Qj0/img.png)
클라이언트 입장에서는 전송하기 위해 세션(=accessToken)이 필요하다. 현재는 AuthService에서 user.addSession()만 할 뿐 그 세션 값을 가져오지는 않고 있다. 1. User 클래스의 addSession() 메서드가 세션을 반환하도록 설정 //User.java package com.endofma.blog.domain; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; import java.time.LocalDateTime; import java.util.ArrayList; import jav..