일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 선형대수
- d
- 자료구조와함께배우는알고리즘입문
- /etc/network/interfaces
- 처음 만나는 AI 수학 with Python
- 코드로배우는스프링부트웹프로젝트
- 알파회계
- 목록처리
- 스프링 시큐리티
- GIT
- 자료구조와 함께 배우는 알고리즘 입문
- Kernighan의 C언어 프로그래밍
- 처음 만나는 AI수학 with Python
- 데비안
- iterator
- 코드로배우는스프링웹프로젝트
- 스프링부트핵심가이드
- 자바편
- ㅒ
- 이터레이터
- 구멍가게코딩단
- 페이징
- baeldung
- 서버설정
- 리눅스
- network configuration
- 티스토리 쿠키 삭제
- resttemplate
- 네트워크 설정
- 친절한SQL튜닝
- Today
- Total
bright jazz music
blog 30 : 고정인증 로그인 기능 구현 1 본문
지난 포스팅에서는 인증값을 헤더에 넣어서, 헤더에 "Authorization" 값이 존재하는 경우 API에 접근할 수 있도록 하였다. 그러나 이렇게 값이 있기만 해도 인증을 완료하는 경우는 거의 없다. 보통은 DB에서 매칭 작업을 하고 나서 토큰을 발급하여 인증하도록 하는 것이 일반적이다.
(DB에서 사용자 확인 - 매칭 - 토큰발급
토큰은 로그인 시에 발급받는 것이 일반적이다. 현재 로그인 기능이 존재하지 않으므로 로그인 기능을 만들어야 한다.
1. 로그인을 위한 컨트롤러 생성: AuthController.java
//AuthController.java
package com.endofma.blog.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequiredArgsConstructor
public class AuthController {
@PostMapping("/auth/login")
public void login(){
//json으로 ID/PW 수신
//DB에서 조회
//토큰 응답
}
}
2. 로그인 테스트를 위한 인텔리제이 http 파일 생성: auth.http
3. 로그인에 사용할 클래스 생성: Login.java
//Login.java
package com.endofma.blog.request;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.validation.constraints.NotBlank;
@Getter
@Setter
@ToString
public class Login {
@NotBlank(message = "이메일을 입력해 주세요")
private String email;
@NotBlank(message = "비밀번호를 입력해 주세요")
private String password;
}
4. AuthController에서 작동 확인
//AuthController.java
package com.endofma.blog.controller;
import com.endofma.blog.request.Login;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
@RequiredArgsConstructor
public class AuthController {
@PostMapping("/auth/login")
public void login(@RequestBody Login login){
//json ID/PW
log.info(">>> login = {}", login.toString());
}
}
### auth.http
POST http://localhost:8080/auth/login
Content-Type: application/json
{
"email" : "catnails@gmail.com",
"password" : "1234"
}
요청 발송. 200. Response Body is empty
5. Entity 생성: User.java
들어온 값을 확인하기 위해 DB값을 조회하여 매칭해야 한다. 우선은 이 때 사용할 Repository와 Entity를 생성해 보자. Service는 그 이후에 생성한다.
//User.java
package com.endofma.blog.domain;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private String password;
private LocalDateTime createdAt;
}
user라는 이름으로 테이블을 생성해야 하는데 user가 예약어라 오류 발생함. 이 포스팅의 맨 아래에 해결 방법 추가하였음.
6. UserRepository 생성
//UserRepository.java
package com.endofma.blog.repository;
import com.endofma.blog.domain.User;
import org.springframework.data.repository.CrudRepository;
public interface UserRepository extends CrudRepository<User, Long> {
}
7. 서버 기동
빌드 * 오류발생
GenerationTarget encountered exception accepting command : Error executing DDL "create table user (id bigint generated by default as identity, created_at timestamp, email varchar(255), name varchar(255), password varchar(255), primary key (id))" via JDBC Statement
"User"가 예약어이기 때문에 발생하는 문제이다.
아래와 같이 User엔티티에 @Table(name="users") 어노테이션을 부착하여 테이블 명을 변경해줬다.
//User.java
package com.endofma.blog.domain;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import javax.persistence.*;
import java.time.LocalDateTime;
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Table(name="users") //테이블 명 설정 user는 예약어라 오류발생
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private String password;
private LocalDateTime createdAt;
}
https://velog.io/@choidongkuen/Springboot-User-%EC%98%88%EC%95%BD%EC%96%B4-%EC%98%A4%EB%A5%98
[Springboot] org.hibernate.to ol.schema.spi.CommandAcc eptanceException: Error executing DDL " 오류
안녕하세요 오늘은 제거 프로젝트를 진행하면서 겪었던 '예약어 오류'에 대해서 공유하고자 합니다 👨💻먼저 이해를 위해 제가 구현한 클래스부터 소개하겠습니다.
velog.io
재기동 하면 빌드 성공
8. http 테스트
auth.http를 실행하여 요청을 발송한다. 아래와 같이 값이 잘 들어오는 모습을 확인할 수 있다.
이제 로그인을 테스트 해볼 수 있는 기본적인 구성이 갖추어졌다.
그런데 현재 DB가 비어 있으므로 조회할 수 없다. 값을 넣어주는 작업을 반복하기는 번거로우므로 스프링을 시작할 때 자동으로 DB에 값을 넣어주는 작업을 진행하려 한다. 이는 다음 포스팅에 작성한다.
'Projects > blog' 카테고리의 다른 글
blog 31 : 세션 토큰 발급기능 추가 1 (0) | 2023.02.15 |
---|---|
blog 30 : 고정인증 로그인 기능 구현 2 (0) | 2023.02.14 |
blog 29 : 헤더 인증으로 변경, Intellij http (0) | 2023.02.13 |
blog 28 : ArgumentResolver 사용해보기 (0) | 2023.02.10 |
blog 27 : Interceptor 사용해 보기 (0) | 2023.02.09 |