@Configuration
public class JwtConfiguration {
@Value("${jwt.secret.key}") // application.properties에서 설정한 비밀키 값
private String secretKey;
@Bean
public Key jwtKey() {
byte[] bytes = Base64.getDecoder().decode(secretKey);
return Keys.hmacShaKeyFor(bytes);
}
}
jwt>JwtUtil
[User 객체가 null이 아닐 때만 사용자 이름을 가져올 수 있도록 수정]
service>CommentService
[DataIntegrityViolationException을 활용하여 회원가입 시 중복확인 코드 수정]
service>UserService
public ResponseEntity<Response> signup(SignupRequestDto requestDto) {
String username = requestDto.getUsername();
String nickname = requestDto.getNickname();
String password = requestDto.getPassword();
// 사용자 ROLE 확인
UserRoleEnum role = UserRoleEnum.USER;
if (requestDto.isAdmin()) {
if (!ADMIN_TOKEN.equals(requestDto.getAdminToken())) {
throw new InvalidPasswordException("관리자 암호가 틀려 등록이 불가능합니다.");
}
role = UserRoleEnum.ADMIN;
}
// 사용자 등록
User user = new User(username, nickname, password, role);
try {
userRepository.save(user);
} catch (DataIntegrityViolationException e) {
if (e.getMessage().contains("constraint [uk_username]")) {
// 사용자 이름이 중복될 경우
throw new IllegalArgumentException("중복된 사용자가 존재합니다.");
} else if (e.getMessage().contains("constraint [uk_nickname]")) {
// 별명이 중복될 경우
throw new IllegalArgumentException("중복된 별명입니다.");
} else {
// 기타 데이터베이스 제약 조건 위반
throw e;
}
}
Response response = new Response(HttpStatus.OK.value(), "회원가입이 성공적으로 완료되었습니다.");
return ResponseEntity.ok(response); // 성공 메시지와 상태 코드 반환
}