Skip to content

Commit 55e7377

Browse files
committed
feat: 비회원 로그인 jwt 적용
1 parent bd87e9d commit 55e7377

File tree

2 files changed

+18
-24
lines changed

2 files changed

+18
-24
lines changed

src/main/java/com/oronaminc/join/member/security/AuthController.java

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,11 @@
1717
import jakarta.servlet.http.HttpServletResponse;
1818
import jakarta.servlet.http.HttpSession;
1919
import jakarta.validation.Valid;
20-
import java.util.List;
2120
import java.util.Map;
2221
import lombok.RequiredArgsConstructor;
2322
import org.springframework.http.HttpStatus;
24-
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
25-
import org.springframework.security.core.Authentication;
2623
import org.springframework.security.core.annotation.AuthenticationPrincipal;
27-
import org.springframework.security.core.authority.SimpleGrantedAuthority;
28-
import org.springframework.security.core.context.SecurityContext;
2924
import org.springframework.security.core.context.SecurityContextHolder;
30-
import org.springframework.security.web.context.HttpSessionSecurityContextRepository;
3125
import org.springframework.web.bind.annotation.GetMapping;
3226
import org.springframework.web.bind.annotation.PostMapping;
3327
import org.springframework.web.bind.annotation.RequestBody;
@@ -64,31 +58,24 @@ public Map<String, AuthTokenResponse> kakaoLogin(
6458

6559
@Operation(
6660
summary = "비회원 로그인",
67-
description = "닉네임을 입력하면 비회원 세션이 생성되고 인증이 설정됩니다. 이후 모든 요청에 세션 인증이 적용됩니다.",
6861
responses = {
6962
@ApiResponse(responseCode = "201", description = "비회원 로그인 성공"),
7063
@ApiResponse(responseCode = "400", description = "닉네임 누락 또는 유효성 검증 실패")
7164
}
7265
)
7366
@PostMapping("/guest")
7467
@ResponseStatus(HttpStatus.CREATED)
75-
public SessionInfoResponse guestLogin(@RequestBody @Valid GuestLoginRequest guestLoginRequest,
76-
HttpServletRequest request) {
77-
MemberDetails guest = authService.loadGuest(guestLoginRequest);
68+
public Map<String, AuthTokenResponse> guestLogin(
69+
@RequestBody @Valid GuestLoginRequest guestLoginRequest,
70+
HttpServletResponse response) {
71+
LoginResponse loginResponse = authService.loadGuest(guestLoginRequest);
7872

79-
Authentication authentication = new UsernamePasswordAuthenticationToken(
80-
guest, null, List.of(new SimpleGrantedAuthority(guest.getRole()))
81-
);
82-
83-
SecurityContext context = SecurityContextHolder.createEmptyContext();
84-
context.setAuthentication(authentication);
85-
SecurityContextHolder.setContext(context);
73+
String refreshToken = loginResponse.refreshToken();
8674

87-
request.getSession(true)
88-
.setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
89-
context);
75+
JwtUtils.addRefreshTokenCookie(response, refreshToken,
76+
loginResponse.refreshTokenExpiresIn());
9077

91-
return toSessionInfoResponse(guest);
78+
return Map.of("token", loginResponse.authTokenResponse());
9279
}
9380

9481
@Operation(

src/main/java/com/oronaminc/join/member/security/AuthService.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.oronaminc.join.member.security;
22

33
import static com.oronaminc.join.member.util.MemberMapper.toGuestMember;
4-
import static com.oronaminc.join.member.util.MemberMapper.toGuestMemberDetails;
54

65
import com.oronaminc.join.member.dao.MemberRepository;
76
import com.oronaminc.join.member.domain.Member;
@@ -72,13 +71,21 @@ public class AuthService extends DefaultOAuth2UserService {
7271
// }
7372

7473
@Transactional
75-
public MemberDetails loadGuest(GuestLoginRequest guestLoginRequest) {
74+
public LoginResponse loadGuest(GuestLoginRequest guestLoginRequest) {
7675
Member guest = toGuestMember(guestLoginRequest);
7776

7877
memberRepository.save(guest);
7978
guest.registerGuest();
8079

81-
return toGuestMemberDetails(guest);
80+
TokenPair tokenPair = jwtTokenProvider.generateTokenPair(
81+
new JwtMemberInfo(guest.getId(), guest.getNickname(), guest.getMemberType()));
82+
83+
AuthTokenResponse authTokenResponse = new AuthTokenResponse(tokenPair.accessToken(),
84+
tokenPair.accessTokenExpiresIn(), guest.getId(),
85+
guest.getNickname(), guest.getMemberType());
86+
87+
return new LoginResponse(authTokenResponse, tokenPair.refreshToken(),
88+
tokenPair.refreshTokenExpiresIn());
8289
}
8390

8491
@Transactional

0 commit comments

Comments
 (0)