개요
2024.06.24 - [백엔드 개발/Spring&JPA] - [Spring boot & JPA] 로그인 기능 구현
앞의 '로그인 기능 구현' 포스팅에서는 단순히 아이디와 비밀번호를 저장해서 비밀번호 매칭 후 로그인 성공 또는 실패를 알려주는 API를 구현하였다.
하지만 비밀번호를 그대로 DB에 저장하게 된다면, 치명적인 개인정보 유출이 일어날 수 있다.
따라서 비밀번호를 암호화하여 저장하는 로직을 구현해보겠다.
기능 구현
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 Data JPA] Spring boot 3에 p6spy 적용하기 (4) | 2024.08.28 |
---|---|
[Spring Data JPA] 로그인 기능 구현(3) - JWT 적용 (0) | 2024.06.28 |
[Spring Data JPA] 로그인 기능 구현 (1) | 2024.06.24 |
좋은 객체 지향 설계의 5가지 원칙 (SOLID) (0) | 2023.03.09 |
스프링 빈과 의존관계 (0) | 2023.03.02 |