diff --git a/src/main/java/com/readyvery/readyverydemo/security/jwt/dto/CustomUserDetails.java b/src/main/java/com/readyvery/readyverydemo/security/jwt/dto/CustomUserDetails.java new file mode 100644 index 0000000..4ce115d --- /dev/null +++ b/src/main/java/com/readyvery/readyverydemo/security/jwt/dto/CustomUserDetails.java @@ -0,0 +1,44 @@ +package com.readyvery.readyverydemo.security.jwt.dto; + +import java.util.Collection; + +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.userdetails.UserDetails; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class CustomUserDetails implements UserDetails { + + private Long id; + private String email; + private String password; + private Collection authorities; + + @Override + public String getUsername() { + return email; + } + + @Override + public boolean isAccountNonExpired() { + return true; // 혹은 실제 계정 상태에 따라 변경 + } + + @Override + public boolean isAccountNonLocked() { + return true; // 혹은 실제 계정 상태에 따라 변경 + } + + @Override + public boolean isCredentialsNonExpired() { + return true; // 혹은 실제 자격 증명 상태에 따라 변경 + } + + @Override + public boolean isEnabled() { + return true; // 혹은 실제 계정 활성화 상태에 따라 변경 + } +} diff --git a/src/main/java/com/readyvery/readyverydemo/security/jwt/filter/JwtAuthenticationProcessingFilter.java b/src/main/java/com/readyvery/readyverydemo/security/jwt/filter/JwtAuthenticationProcessingFilter.java index 006c678..91fb32d 100644 --- a/src/main/java/com/readyvery/readyverydemo/security/jwt/filter/JwtAuthenticationProcessingFilter.java +++ b/src/main/java/com/readyvery/readyverydemo/security/jwt/filter/JwtAuthenticationProcessingFilter.java @@ -1,17 +1,19 @@ package com.readyvery.readyverydemo.security.jwt.filter; import java.io.IOException; +import java.util.Collections; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; +import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper; import org.springframework.security.core.authority.mapping.NullAuthoritiesMapper; import org.springframework.security.core.context.SecurityContextHolder; -import org.springframework.security.core.userdetails.UserDetails; import org.springframework.web.filter.OncePerRequestFilter; import com.readyvery.readyverydemo.domain.UserInfo; import com.readyvery.readyverydemo.domain.repository.UserRepository; +import com.readyvery.readyverydemo.security.jwt.dto.CustomUserDetails; import com.readyvery.readyverydemo.security.jwt.service.JwtService; import jakarta.servlet.FilterChain; @@ -130,10 +132,11 @@ public void checkAccessTokenAndAuthentication(HttpServletRequest request, HttpSe */ public void saveAuthentication(UserInfo myUser) { - UserDetails userDetailsUser = org.springframework.security.core.userdetails.User.builder() - .username(myUser.getEmail()) + CustomUserDetails userDetailsUser = CustomUserDetails.builder() + .id(myUser.getId()) + .email(myUser.getEmail()) .password("readyvery") - .roles(myUser.getRole().name()) + .authorities(Collections.singletonList(new SimpleGrantedAuthority(myUser.getRole().toString()))) .build(); Authentication authentication = diff --git a/src/main/java/com/readyvery/readyverydemo/security/oauth2/handler/OAuth2LoginSuccessHandler.java b/src/main/java/com/readyvery/readyverydemo/security/oauth2/handler/OAuth2LoginSuccessHandler.java index 454ea8f..87dcc25 100644 --- a/src/main/java/com/readyvery/readyverydemo/security/oauth2/handler/OAuth2LoginSuccessHandler.java +++ b/src/main/java/com/readyvery/readyverydemo/security/oauth2/handler/OAuth2LoginSuccessHandler.java @@ -42,16 +42,6 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo } // TODO : 소셜 로그인 시에도 무조건 토큰 생성하지 말고 JWT 인증 필터처럼 RefreshToken 유/무에 따라 다르게 처리해보기 - // private void loginSuccess(HttpServletResponse response, CustomOAuth2User oAuth2User) throws IOException { - // String accessToken = jwtService.createAccessToken(oAuth2User.getEmail()); - // String refreshToken = jwtService.createRefreshToken(); - // response.addHeader(jwtService.getAccessHeader(), "Bearer " + accessToken); - // response.addHeader(jwtService.getRefreshHeader(), "Bearer " + refreshToken); - // - // jwtService.sendAccessAndRefreshToken(response, accessToken, refreshToken); - // jwtService.updateRefreshToken(oAuth2User.getEmail(), refreshToken); - // } - private void loginSuccess(HttpServletResponse response, CustomOAuth2User oAuth2User) throws IOException { String accessToken = jwtService.createAccessToken(oAuth2User.getEmail()); String refreshToken = jwtService.createRefreshToken(); diff --git a/src/main/java/com/readyvery/readyverydemo/src/user/UserController.java b/src/main/java/com/readyvery/readyverydemo/src/user/UserController.java index d1e22fc..cea193a 100644 --- a/src/main/java/com/readyvery/readyverydemo/src/user/UserController.java +++ b/src/main/java/com/readyvery/readyverydemo/src/user/UserController.java @@ -6,6 +6,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.readyvery.readyverydemo.security.jwt.dto.CustomUserDetails; import com.readyvery.readyverydemo.src.user.dto.UserAuthRes; import com.readyvery.readyverydemo.src.user.dto.UserInfoRes; @@ -30,17 +31,27 @@ public String jwtTest() { * @return */ @GetMapping("/auth") - public UserAuthRes userAuth(@AuthenticationPrincipal UserDetails userDetails) { + public UserAuthRes userAuth(@AuthenticationPrincipal CustomUserDetails userDetails) { // 서비스 계층을 호출하여 사용자 정보를 조회합니다. - return userServiceImpl.getUserAuthByEmail(userDetails.getUsername()); + return userServiceImpl.getUserAuthById(userDetails.getId()); } /** * */ @GetMapping("/user/info") - public UserInfoRes userInfo(@AuthenticationPrincipal UserDetails userDetails) { - return userServiceImpl.getUserInfoByEmail(userDetails.getUsername()); + public UserInfoRes userInfo(@AuthenticationPrincipal CustomUserDetails userDetails) { + return userServiceImpl.getUserInfoById(userDetails.getId()); + } + + @GetMapping("/user/detail/info") + public UserDetails userDetail(@AuthenticationPrincipal UserDetails userDetails) { + return userDetails; + } + + @GetMapping("/user/detail1/info") + public UserDetails userDetail1(@AuthenticationPrincipal UserDetails userDetails) { + return userDetails; } /** diff --git a/src/main/java/com/readyvery/readyverydemo/src/user/UserService.java b/src/main/java/com/readyvery/readyverydemo/src/user/UserService.java index f646a2e..52e5242 100644 --- a/src/main/java/com/readyvery/readyverydemo/src/user/UserService.java +++ b/src/main/java/com/readyvery/readyverydemo/src/user/UserService.java @@ -6,8 +6,8 @@ public interface UserService { // 기존 메서드들... - UserAuthRes getUserAuthByEmail(String email); + UserAuthRes getUserAuthById(Long id); - UserInfoRes getUserInfoByEmail(String email); + UserInfoRes getUserInfoById(Long id); } diff --git a/src/main/java/com/readyvery/readyverydemo/src/user/UserServiceImpl.java b/src/main/java/com/readyvery/readyverydemo/src/user/UserServiceImpl.java index 36ebb8f..5c983c0 100644 --- a/src/main/java/com/readyvery/readyverydemo/src/user/UserServiceImpl.java +++ b/src/main/java/com/readyvery/readyverydemo/src/user/UserServiceImpl.java @@ -22,20 +22,20 @@ public class UserServiceImpl implements UserService { private final UserMapper userMapper; @Override - public UserAuthRes getUserAuthByEmail(String email) { - UserInfo userInfo = getUserInfo(email); + public UserAuthRes getUserAuthById(Long id) { + UserInfo userInfo = getUserInfo(id); return userMapper.userInfoToUserAuthRes(userInfo); } @Override - public UserInfoRes getUserInfoByEmail(String email) { - UserInfo userInfo = getUserInfo(email); + public UserInfoRes getUserInfoById(Long id) { + UserInfo userInfo = getUserInfo(id); return userMapper.userInfoToUserInfoRes(userInfo); } - private UserInfo getUserInfo(String email) { - return userRepository.findByEmail(email).orElseThrow( + private UserInfo getUserInfo(Long id) { + return userRepository.findById(id).orElseThrow( () -> new BusinessLogicException(ExceptionCode.USER_NOT_FOUND) ); }