2024.06.24 - [백엔드 개발/Spring&JPA] - [Spring boot & JPA] 로그인 기능 구현
[Spring boot & JPA] 로그인 기능 구현
1. 개발환경 (프로젝트 생성) - Project : Gradle - Groovy- Language : Java- Spring Boot : 3.3.1- Project Metadata * Group : com.example * Artifact / Name : auth * Packaging : Jar * Java : 17- Dependencies * Spring Web
taek2.tistory.com
앞에서 아이디와 비밀번호로 기본적인 로그인 API를 구현했다.
이 방식은 동작은 하지만, 비밀번호를 그대로 저장하고 비교하는 구조라
보안 측면에서는 문제가 있다.
이번에는 Spring Security의 PasswordEncoder를 사용해
비밀번호를 암호화해서 저장하고,
회원가입과 로그인 시 이를 검증하는 방식으로 수정했다.
Spring Data JPA 기반으로 회원가입·로그인 흐름을 함께 구성한다.
기능 구현
- Config 수정
<SecurityConfig.java>
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
...
.requestMatchers("/login", "/register").permitAll() // /register 추가
...
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
securityFilterChain 메서드 안에 requestMatchers에 /register 권한을 추가한다.
passwordEncoder 메서드를 Bean에 등록한다.
- DTO 생성
<RegisterRequest.java>
package com.example.auth.dto;
import lombok.Data;
@Data
public class RegisterRequest {
private String registerId;
private String registerPw;
}
회원가입 DTO를 생성한다.
- Entity 수정
<Member.java>
@RequiredArgsConstructor
public class Member {
...
private String password;
public void toEntity(String id, String pw) {
this.memberId = id;
this.password = pw;
}
}
@RequiredArgsConstructor 어노테이션 추가.
엔티티를 생성해주는 toEntity메서드를 추가해주었다.
- Service 수정
<MemberService.java>
@Service
public class MemberService {
...
@Autowired PasswordEncoder passwordEncoder;
public boolean validateMember(LoginRequest loginRequest) {
...
return passwordEncoder.matches(loginRequest.getPw(), member.getPassword());
}
public void registerMember(RegisterRequest registerRequest) {
Member member = new Member();
member.toEntity(registerRequest.getRegisterId(), passwordEncoder.encode(registerRequest.getRegisterPw()));
memberRepository.save(member);
}
}
PasswordEncoder 객체를 생성해준다.
validateMember 메서드에서 비밀번호 검증 로직을 수정해준다.
passwordEncoder에서 제공해주는 matches 메서드를 통해 비밀번호 검증을 한다.
추가로 회원가입하는 registerMember 메서드를 구현한다.
- Controller 추가
<MemberController.java>
@PostMapping("/register")
public String register(@RequestBody RegisterRequest registerRequest) {
memberService.registerMember(registerRequest);
return "Registered successfully";
}
/login 아래에 추가해준다.
검증
- 회원가입 요청
- URL : http://localhost:8080/register
- Method : POST
- Body : raw, JSON 형식
- json
{
"registerId": "admin",
"registerPw": "1234"
}

DB에 저장된 값을 확인해보면,

다음과 같이 암호화되어서 저장된 것을 확인할 수 있다.
- 로그인 검증
- URL : http://localhost:8080/login
- Method : POST
- Body : raw, JSON 형식
- json
{
"id": "admin",
"pw": "1234"
}

로그인도 마찬가지로 success가 뜨면 암호화된 비밀번호로 로그인 검증까지 하였다.
다음으로는 JWT를 적용시켜 보안을 강화시켜보자.
'웹 개발 > Spring&JPA' 카테고리의 다른 글
| [Spring Boot 3] JPA SQL 파라미터 로그 보기 (P6Spy 적용) (4) | 2024.08.28 |
|---|---|
| [Spring Data JPA] 로그인 API 구현하기 (JWT 인증 적용) (0) | 2024.06.28 |
| [Spring Data JPA] 로그인 API 구현하기 (아이디/비밀번호 검증) (1) | 2024.06.24 |
| 좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2023.03.09 |
| 스프링 빈과 의존관계 (0) | 2023.03.02 |