Skip to content

Commit

Permalink
refactor: AuthenticationPrincipalArgumentResolver 클래스 member 패키지 의존성 제거
Browse files Browse the repository at this point in the history
- LoginMember 클래스 auth 패키지로 이동 및 User로 명칭 변경
- LoginMember 클래스 이동으로 순환이 제거되어 기존 UserDetail이 불필요하여 삭제
  • Loading branch information
김현수 committed Sep 14, 2022
1 parent 6b73538 commit b794805
Show file tree
Hide file tree
Showing 11 changed files with 60 additions and 75 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import lombok.RequiredArgsConstructor;
import nextstep.auth.context.Authentication;
import nextstep.auth.user.UserDetail;
import nextstep.auth.user.User;
import nextstep.auth.user.UserDetailService;
import nextstep.auth.interceptor.AuthContextChainInterceptor;
import org.apache.tomcat.util.codec.binary.Base64;
Expand All @@ -15,7 +15,7 @@ public class BasicAuthFilter extends AuthContextChainInterceptor {

@Override
protected void checkValidAuth(final AuthenticationToken token) {
UserDetail loginMember = userDetailService.loadUserByUsername(token.getPrincipal());
User loginMember = userDetailService.loadUserByUsername(token.getPrincipal());
if (loginMember == null) {
throw new AuthenticationException();
}
Expand All @@ -26,7 +26,7 @@ protected void checkValidAuth(final AuthenticationToken token) {

@Override
protected Authentication getAuthentication(final AuthenticationToken token) {
UserDetail loginMember = userDetailService.loadUserByUsername(token.getPrincipal());
User loginMember = userDetailService.loadUserByUsername(token.getPrincipal());
return new Authentication(loginMember.getEmail(), loginMember.getAuthorities());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import nextstep.auth.context.Authentication;
import nextstep.auth.context.SecurityContextHolder;
import nextstep.auth.user.UserDetail;
import nextstep.auth.interceptor.AuthNotChainInterceptor;
import nextstep.auth.user.User;
import nextstep.auth.user.UserDetailService;

import javax.servlet.http.HttpServletRequest;
Expand All @@ -27,8 +27,8 @@ protected AuthenticationToken createAuthToken(final HttpServletRequest request)
}

@Override
protected void afterSuccessUserCheck(final HttpServletRequest request, final HttpServletResponse response, UserDetail userDetail) {
Authentication authentication = new Authentication(userDetail.getEmail(), userDetail.getAuthorities());
protected void afterSuccessUserCheck(final HttpServletRequest request, final HttpServletResponse response, User user) {
Authentication authentication = new Authentication(user.getEmail(), user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import nextstep.auth.context.Authentication;
import nextstep.auth.context.SecurityContextHolder;
import nextstep.member.domain.LoginMember;
import nextstep.auth.user.User;
import org.springframework.core.MethodParameter;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
Expand All @@ -16,12 +16,12 @@ public boolean supportsParameter(MethodParameter parameter) {
}

@Override
public LoginMember resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
public User resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null) {
return LoginMember.guest();
return User.guest();
}

return LoginMember.of(authentication.getPrincipal().toString(), authentication.getAuthorities());
return User.of(authentication.getPrincipal().toString(), authentication.getAuthorities());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import lombok.RequiredArgsConstructor;
import nextstep.auth.authentication.AuthenticationException;
import nextstep.auth.authentication.AuthenticationToken;
import nextstep.auth.user.UserDetail;
import nextstep.auth.user.User;
import nextstep.auth.user.UserDetailService;
import org.springframework.web.servlet.HandlerInterceptor;

Expand All @@ -20,8 +20,8 @@ public boolean preHandle(final HttpServletRequest request, final HttpServletResp
try {
AuthenticationToken authToken = createAuthToken(request);
checkValidAuth(authToken);
UserDetail userDetail = getUserDetail(authToken);
afterSuccessUserCheck(request, response, userDetail);
User user = getUserDetail(authToken);
afterSuccessUserCheck(request, response, user);
return false;
} catch (Exception e) {
return true;
Expand All @@ -30,11 +30,11 @@ public boolean preHandle(final HttpServletRequest request, final HttpServletResp

protected abstract AuthenticationToken createAuthToken(final HttpServletRequest request) throws IOException;

protected abstract void afterSuccessUserCheck(final HttpServletRequest request, final HttpServletResponse response, UserDetail userDetail)
protected abstract void afterSuccessUserCheck(final HttpServletRequest request, final HttpServletResponse response, User user)
throws IOException;

protected void checkValidAuth(AuthenticationToken authToken){
UserDetail loginMember = getUserDetail(authToken);
User loginMember = getUserDetail(authToken);

if (loginMember == null) {
throw new AuthenticationException();
Expand All @@ -45,7 +45,7 @@ protected void checkValidAuth(AuthenticationToken authToken){
}
}

private UserDetail getUserDetail(final AuthenticationToken authToken) {
private User getUserDetail(final AuthenticationToken authToken) {
return userDetailService.loadUserByUsername(authToken.getPrincipal());
}
}
6 changes: 3 additions & 3 deletions src/main/java/nextstep/auth/token/TokenAuthInterceptor.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import nextstep.auth.authentication.AuthenticationToken;
import nextstep.auth.user.UserDetail;
import nextstep.auth.user.User;
import nextstep.auth.interceptor.AuthNotChainInterceptor;
import nextstep.auth.user.UserDetailService;
import org.springframework.http.MediaType;
Expand Down Expand Up @@ -30,8 +30,8 @@ protected AuthenticationToken createAuthToken(final HttpServletRequest request)
@Override
protected void afterSuccessUserCheck(final HttpServletRequest request,
final HttpServletResponse response,
final UserDetail userDetail) throws IOException {
String token = jwtTokenProvider.createToken(userDetail.getEmail(), userDetail.getAuthorities());
final User user) throws IOException {
String token = jwtTokenProvider.createToken(user.getEmail(), user.getAuthorities());
TokenResponse tokenResponse = new TokenResponse(token);

String responseToClient = new ObjectMapper().writeValueAsString(tokenResponse);
Expand Down
33 changes: 33 additions & 0 deletions src/main/java/nextstep/auth/user/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package nextstep.auth.user;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.List;

@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public class User {
private String email;
private String password;
private List<String> authorities;

public static User of(String email, List<String> authorities) {
return new User(email, null, authorities);
}

public static User of(String email, String password, List<String> authorities) {
return new User(email, password, authorities);
}

public static User guest() {
return new User();
}

public boolean checkPassword(final String password) {
return this.password.equals(password);
}
}
13 changes: 0 additions & 13 deletions src/main/java/nextstep/auth/user/UserDetail.java

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/java/nextstep/auth/user/UserDetailService.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
package nextstep.auth.user;

public interface UserDetailService {
UserDetail loadUserByUsername(String email);
User loadUserByUsername(String email);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package nextstep.member.application;

import nextstep.auth.user.User;
import nextstep.auth.user.UserDetailService;
import nextstep.member.domain.LoginMember;
import nextstep.member.domain.Member;
import nextstep.member.domain.MemberRepository;
import org.springframework.stereotype.Service;
Expand All @@ -14,8 +14,8 @@ public LoginMemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}

public LoginMember loadUserByUsername(String email) {
public User loadUserByUsername(String email) {
Member member = memberRepository.findByEmail(email).orElseThrow(RuntimeException::new);
return LoginMember.of(member);
return User.of(member.getEmail(), member.getPassword(), member.getRoles());
}
}
35 changes: 0 additions & 35 deletions src/main/java/nextstep/member/domain/LoginMember.java

This file was deleted.

8 changes: 4 additions & 4 deletions src/main/java/nextstep/member/ui/MemberController.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package nextstep.member.ui;

import nextstep.auth.authorization.AuthenticationPrincipal;
import nextstep.auth.user.User;
import nextstep.member.application.MemberService;
import nextstep.member.application.dto.MemberRequest;
import nextstep.member.application.dto.MemberResponse;
import nextstep.member.domain.LoginMember;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

Expand Down Expand Up @@ -43,19 +43,19 @@ public ResponseEntity<MemberResponse> deleteMember(@PathVariable Long id) {
}

@GetMapping("/members/me")
public ResponseEntity<MemberResponse> findMemberOfMine(@AuthenticationPrincipal LoginMember loginMember) {
public ResponseEntity<MemberResponse> findMemberOfMine(@AuthenticationPrincipal User loginMember) {
MemberResponse member = memberService.findMember(loginMember.getEmail());
return ResponseEntity.ok().body(member);
}

@PutMapping("/members/me")
public ResponseEntity<MemberResponse> updateMemberOfMine(@AuthenticationPrincipal LoginMember loginMember, @RequestBody MemberRequest param) {
public ResponseEntity<MemberResponse> updateMemberOfMine(@AuthenticationPrincipal User loginMember, @RequestBody MemberRequest param) {
memberService.updateMember(loginMember.getEmail(), param);
return ResponseEntity.ok().build();
}

@DeleteMapping("/members/me")
public ResponseEntity<MemberResponse> deleteMemberOfMine(@AuthenticationPrincipal LoginMember loginMember) {
public ResponseEntity<MemberResponse> deleteMemberOfMine(@AuthenticationPrincipal User loginMember) {
memberService.deleteMember(loginMember.getEmail());
return ResponseEntity.noContent().build();
}
Expand Down

0 comments on commit b794805

Please sign in to comment.