From 402ee32a4c6d21b595085b35101fc9ee680ed711 Mon Sep 17 00:00:00 2001 From: MyunghyunNero Date: Sat, 18 Nov 2023 16:18:11 +0900 Subject: [PATCH] =?UTF-8?q?refactor=20:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kusitms/gallae/config/PasswordConfig.java | 17 ++++++++++ .../gallae/config/SpringSecurityConfig.java | 15 --------- .../controller/AuthenticationController.java | 30 ++++++++++++++--- .../gallae/controller/UserController.java | 5 +-- .../gallae/dto/user/LoginRequestDto.java | 2 ++ .../gallae/dto/user/LoginResponse.java | 18 +--------- .../repository/user/UserRepository.java | 2 ++ .../service/user/AuthenticationService.java | 18 ++-------- .../user/CustomUserDetailsService.java | 33 ------------------- .../gallae/service/user/UserService.java | 23 ++++++------- 10 files changed, 64 insertions(+), 99 deletions(-) create mode 100644 src/main/java/kusitms/gallae/config/PasswordConfig.java delete mode 100644 src/main/java/kusitms/gallae/service/user/CustomUserDetailsService.java diff --git a/src/main/java/kusitms/gallae/config/PasswordConfig.java b/src/main/java/kusitms/gallae/config/PasswordConfig.java new file mode 100644 index 0000000..7d21e34 --- /dev/null +++ b/src/main/java/kusitms/gallae/config/PasswordConfig.java @@ -0,0 +1,17 @@ +package kusitms.gallae.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; + + +@Configuration +public class PasswordConfig { + + @Bean + public PasswordEncoder passwordEncoder() + { + return new BCryptPasswordEncoder(); + } +} diff --git a/src/main/java/kusitms/gallae/config/SpringSecurityConfig.java b/src/main/java/kusitms/gallae/config/SpringSecurityConfig.java index 6d6139f..e7c8027 100644 --- a/src/main/java/kusitms/gallae/config/SpringSecurityConfig.java +++ b/src/main/java/kusitms/gallae/config/SpringSecurityConfig.java @@ -34,12 +34,7 @@ public class SpringSecurityConfig { private final JwtProvider jwtAuthenticationProvider; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final JwtAccessDeniedHandler jwtAccessDeniedHandler; - private final UserDetailsService customUserDetailsService; - @Bean - public PasswordEncoder passwordEncoder() { - return new BCryptPasswordEncoder(); - } @Bean public WebSecurityCustomizer webSecurityCustomizer() { return (web) -> web.ignoring().requestMatchers( "/swagger-resources/**", @@ -47,16 +42,6 @@ public WebSecurityCustomizer webSecurityCustomizer() { "/v3/api-docs", "/webjars/**"); } - @Bean - public AuthenticationManager authenticationManagerBean(HttpSecurity http) throws Exception { - return http.getSharedObject(AuthenticationManagerBuilder.class) - .userDetailsService(customUserDetailsService) - .passwordEncoder(passwordEncoder()) - .and() - .build(); - } - - @Bean public SecurityFilterChain SecurityFilterChain(HttpSecurity httpSecurity) throws Exception { diff --git a/src/main/java/kusitms/gallae/controller/AuthenticationController.java b/src/main/java/kusitms/gallae/controller/AuthenticationController.java index a513b68..69c823e 100644 --- a/src/main/java/kusitms/gallae/controller/AuthenticationController.java +++ b/src/main/java/kusitms/gallae/controller/AuthenticationController.java @@ -1,12 +1,16 @@ package kusitms.gallae.controller; +import io.swagger.v3.oas.annotations.Parameter; import jakarta.servlet.http.HttpServletResponse; +import kusitms.gallae.config.BaseResponse; +import kusitms.gallae.config.BaseResponseStatus; import kusitms.gallae.dto.user.LoginRequestDto; import kusitms.gallae.dto.user.LoginResponse; import kusitms.gallae.service.user.AuthenticationService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.*; @RestController @@ -16,16 +20,32 @@ public class AuthenticationController { @Autowired private AuthenticationService authenticationService; + @Autowired + private PasswordEncoder passwordEncoder; + + // 로그인 요청을 처리하는 메서드 @PostMapping("/login") - public ResponseEntity login(@RequestBody LoginRequestDto loginRequestDto, - HttpServletResponse httpServletResponse) { + public ResponseEntity> login( + @Parameter(description = "아이디", example = "아이") + @RequestParam(value = "loginId", required = true) + String loginId, + + @Parameter(description = "패스워드") + @RequestParam(value = "login password", required = true) + String loginPw, + + HttpServletResponse httpServletResponse) { try { - LoginResponse loginResponse = authenticationService.login(loginRequestDto, httpServletResponse); - return ResponseEntity.ok(loginResponse); + + LoginRequestDto loginRequestDto = new LoginRequestDto(); + loginRequestDto.setLoginId(loginId); + loginRequestDto.setLoginPw(loginPw); + System.out.println(loginRequestDto.getLoginPw()); + return ResponseEntity.ok(new BaseResponse<>(authenticationService.login(loginRequestDto, httpServletResponse))); } catch (RuntimeException e) { - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null); + return ResponseEntity.ok(new BaseResponse<>(BaseResponseStatus.NOT_FOUND)); } } } diff --git a/src/main/java/kusitms/gallae/controller/UserController.java b/src/main/java/kusitms/gallae/controller/UserController.java index 37d5c9a..d711b92 100644 --- a/src/main/java/kusitms/gallae/controller/UserController.java +++ b/src/main/java/kusitms/gallae/controller/UserController.java @@ -1,5 +1,6 @@ package kusitms.gallae.controller; +import kusitms.gallae.config.BaseResponseStatus; import kusitms.gallae.domain.User; import kusitms.gallae.dto.user.UserRegistrationDto; import kusitms.gallae.service.user.UserService; @@ -21,8 +22,8 @@ public UserController(UserService userService) { @PostMapping("/register") public ResponseEntity registerUser(@ModelAttribute UserRegistrationDto registrationDto) { try { - User user = userService.registerNewUser(registrationDto); - return ResponseEntity.ok(user); + userService.registerNewUser(registrationDto); + return ResponseEntity.ok(BaseResponseStatus.SUCCESS); } catch (Exception e) { return ResponseEntity.badRequest().body(e.getMessage()); } diff --git a/src/main/java/kusitms/gallae/dto/user/LoginRequestDto.java b/src/main/java/kusitms/gallae/dto/user/LoginRequestDto.java index b6437c8..83fb305 100644 --- a/src/main/java/kusitms/gallae/dto/user/LoginRequestDto.java +++ b/src/main/java/kusitms/gallae/dto/user/LoginRequestDto.java @@ -2,8 +2,10 @@ import lombok.Getter; import lombok.NoArgsConstructor; +import lombok.Setter; @Getter +@Setter @NoArgsConstructor public class LoginRequestDto { private String loginId; diff --git a/src/main/java/kusitms/gallae/dto/user/LoginResponse.java b/src/main/java/kusitms/gallae/dto/user/LoginResponse.java index c771012..4b8e276 100644 --- a/src/main/java/kusitms/gallae/dto/user/LoginResponse.java +++ b/src/main/java/kusitms/gallae/dto/user/LoginResponse.java @@ -9,27 +9,11 @@ @Getter @NoArgsConstructor public class LoginResponse { - private Long id; - private String nickName; - private String email; - private String name; - private String imageUrl; - private String phoneNumber; - private Role role; - private String tokenType; private String accessToken; private String refreshToken; @Builder - public LoginResponse(Long id, String name, String phoneNumber, String nickName, String email, String imageUrl, Role role, String tokenType, String accessToken, String refreshToken) { - this.id = id; - this.nickName = nickName; - this.phoneNumber = phoneNumber; - this.name = name; - this.email = email; - this.imageUrl = imageUrl; - this.role = role; - this.tokenType = tokenType; + public LoginResponse(String accessToken, String refreshToken) { this.accessToken = accessToken; this.refreshToken = refreshToken; } diff --git a/src/main/java/kusitms/gallae/repository/user/UserRepository.java b/src/main/java/kusitms/gallae/repository/user/UserRepository.java index fb81e0a..458598f 100644 --- a/src/main/java/kusitms/gallae/repository/user/UserRepository.java +++ b/src/main/java/kusitms/gallae/repository/user/UserRepository.java @@ -12,4 +12,6 @@ public interface UserRepository extends JpaRepository { boolean existsByLoginId(String loginId); boolean existsByNickName(String nickName); Optional findByLoginId(String loginId); + + Optional findByLoginIdAndLoginPw(String loginId, String loginPw); } diff --git a/src/main/java/kusitms/gallae/service/user/AuthenticationService.java b/src/main/java/kusitms/gallae/service/user/AuthenticationService.java index fd51a50..82923bd 100644 --- a/src/main/java/kusitms/gallae/service/user/AuthenticationService.java +++ b/src/main/java/kusitms/gallae/service/user/AuthenticationService.java @@ -12,14 +12,13 @@ import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.List; @Service public class AuthenticationService { - @Autowired - private AuthenticationManager authenticationManager; @Autowired private JwtProvider jwtProvider; @@ -28,13 +27,8 @@ public class AuthenticationService { private UserRepository userRepository; public LoginResponse login(LoginRequestDto loginRequestDto, HttpServletResponse httpServletResponse) { - // 사용자 인증 - Authentication authentication = authenticationManager.authenticate( - new UsernamePasswordAuthenticationToken(loginRequestDto.getLoginId(), loginRequestDto.getLoginId()) - ); - // 사용자 정보 조회 - User user = userRepository.findByLoginId(loginRequestDto.getLoginId()) + User user = userRepository.findByLoginIdAndLoginPw(loginRequestDto.getLoginId(), loginRequestDto.getLoginPw()) .orElseThrow(() -> new RuntimeException("User not found")); // JWT 액세스 토큰 생성 @@ -49,14 +43,6 @@ public LoginResponse login(LoginRequestDto loginRequestDto, HttpServletResponse // 로그인 응답 생성 및 반환 return LoginResponse.builder() - .id(user.getId()) - .name(user.getName()) - .phoneNumber(user.getPhoneNumber()) - .nickName(user.getNickName()) - .email(user.getEmail()) - .imageUrl(user.getProfileImageUrl()) - .role(user.getRole()) - .tokenType("Bearer") .accessToken(accessToken) .refreshToken(user.getRefreshToken()) .build(); diff --git a/src/main/java/kusitms/gallae/service/user/CustomUserDetailsService.java b/src/main/java/kusitms/gallae/service/user/CustomUserDetailsService.java deleted file mode 100644 index c0e164d..0000000 --- a/src/main/java/kusitms/gallae/service/user/CustomUserDetailsService.java +++ /dev/null @@ -1,33 +0,0 @@ -package kusitms.gallae.service.user; - -import kusitms.gallae.domain.User; -import kusitms.gallae.repository.user.UserRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.security.core.authority.SimpleGrantedAuthority; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.stereotype.Service; - -import java.util.Collections; - -@Service -public class CustomUserDetailsService implements UserDetailsService { - - private final UserRepository userRepository; - - @Autowired - public CustomUserDetailsService(UserRepository userRepository) { - this.userRepository = userRepository; - } - - @Override - public UserDetails loadUserByUsername(String loginId) throws UsernameNotFoundException { - User user = userRepository.findByLoginId(loginId) - .orElseThrow(() -> new UsernameNotFoundException("로그인 ID에 해당하는 유저를 찾지 못했습니다: " + loginId)); - - SimpleGrantedAuthority authority = new SimpleGrantedAuthority("ROLE_USER"); - - return new org.springframework.security.core.userdetails.User(user.getName(), user.getLoginPw(), Collections.singletonList(authority)); - } -} diff --git a/src/main/java/kusitms/gallae/service/user/UserService.java b/src/main/java/kusitms/gallae/service/user/UserService.java index 5c2d44a..a8e4b93 100644 --- a/src/main/java/kusitms/gallae/service/user/UserService.java +++ b/src/main/java/kusitms/gallae/service/user/UserService.java @@ -13,18 +13,17 @@ @Service public class UserService { - private final UserRepository userRepository; - private final PasswordEncoder passwordEncoder; - private final S3Service s3Service; @Autowired - public UserService(UserRepository userRepository, PasswordEncoder passwordEncoder, S3Service s3Service) { - this.userRepository = userRepository; - this.passwordEncoder = passwordEncoder; - this.s3Service = s3Service; - } + private UserRepository userRepository; + + @Autowired + private PasswordEncoder passwordEncoder; - public User registerNewUser(UserRegistrationDto registrationDto) throws IllegalStateException, IOException { + @Autowired + private S3Service s3Service; + + public void registerNewUser(UserRegistrationDto registrationDto) throws IllegalStateException, IOException { if (userRepository.existsByLoginId(registrationDto.getLoginId())) { throw new IllegalStateException("이미 존재하는 ID 입니다."); } @@ -46,9 +45,11 @@ public User registerNewUser(UserRegistrationDto registrationDto) throws IllegalS .refreshToken("") // 회원가입은 토큰 없음 .profileImageUrl(profileImageUrl) // 프로필 이미지 URL 추가 .signUpStatus(User.UserSignUpStatus.USER) - .loginPw(passwordEncoder.encode(registrationDto.getLoginPw())) + .loginPw(registrationDto.getLoginPw()) .build(); - return userRepository.save(newUser); + System.out.println(newUser.getLoginPw()); + + userRepository.save(newUser); } }