Skip to content

Commit

Permalink
Fix: 유저 AuthenticationPrincipal id 기능 조회로 변경
Browse files Browse the repository at this point in the history
  • Loading branch information
1223v committed Nov 16, 2023
1 parent d456527 commit 68305d0
Show file tree
Hide file tree
Showing 6 changed files with 74 additions and 26 deletions.
Original file line number Diff line number Diff line change
@@ -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<? extends GrantedAuthority> 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; // 혹은 실제 계정 활성화 상태에 따라 변경
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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 =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
public interface UserService {
// 기존 메서드들...

UserAuthRes getUserAuthByEmail(String email);
UserAuthRes getUserAuthById(Long id);

UserInfoRes getUserInfoByEmail(String email);
UserInfoRes getUserInfoById(Long id);

}
Original file line number Diff line number Diff line change
Expand Up @@ -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)
);
}
Expand Down

0 comments on commit 68305d0

Please sign in to comment.