Skip to content

Commit 1917f71

Browse files
authored
feat: 토큰 응답 시 사용자 권한 응답 추가
* feat: 토큰 생성 응답 DTO에 사용자 권한 필드 추가 * feat: 토큰 생성, 갱신 로직 수정 - 토큰과 사용자 권한을 같이 응답시키도록 구현
1 parent 2f36da9 commit 1917f71

File tree

5 files changed

+32
-6
lines changed

5 files changed

+32
-6
lines changed

src/main/java/dmu/dasom/api/domain/member/controller/MemberController.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ public ResponseEntity<Void> tokenRotation(@AuthenticationPrincipal final UserDet
6464
final HttpHeaders headers = new HttpHeaders();
6565
headers.add("Access-Token", tokenBox.getAccessToken());
6666
headers.add("Refresh-Token", tokenBox.getRefreshToken());
67+
headers.add("Authority", tokenBox.getAuthority());
6768

6869
return ResponseEntity.ok().headers(headers).build();
6970
}

src/main/java/dmu/dasom/api/domain/member/service/MemberServiceImpl.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@
99
import dmu.dasom.api.global.auth.jwt.JwtUtil;
1010
import dmu.dasom.api.global.auth.userdetails.UserDetailsImpl;
1111
import lombok.RequiredArgsConstructor;
12+
import org.springframework.security.core.GrantedAuthority;
1213
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
1314
import org.springframework.stereotype.Service;
1415
import org.springframework.transaction.annotation.Transactional;
1516

17+
import java.util.Collection;
18+
import java.util.Iterator;
19+
1620
@RequiredArgsConstructor
1721
@Service
1822
@Transactional(readOnly = true)
@@ -49,7 +53,13 @@ public void signUp(final SignupRequestDto request) {
4953
// 토큰 갱신
5054
@Override
5155
public TokenBox tokenRotation(final UserDetailsImpl userDetails) {
52-
return jwtUtil.tokenRotation(userDetails);
56+
final Collection<? extends GrantedAuthority> authorities = userDetails.getAuthorities();
57+
final Iterator<? extends GrantedAuthority> iterator = authorities.iterator();
58+
final GrantedAuthority auth = iterator.next();
59+
60+
final String authority = auth.getAuthority();
61+
62+
return jwtUtil.tokenRotation(userDetails.getUsername(), authority);
5363
}
5464

5565
}

src/main/java/dmu/dasom/api/global/auth/dto/TokenBox.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,8 @@ public class TokenBox {
1919
@NotNull
2020
private String refreshToken;
2121

22+
@Schema(description = "권한")
23+
@NotNull
24+
private String authority;
25+
2226
}

src/main/java/dmu/dasom/api/global/auth/filter/CustomAuthenticationFilter.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
1818
import org.springframework.security.core.Authentication;
1919
import org.springframework.security.core.AuthenticationException;
20+
import org.springframework.security.core.GrantedAuthority;
2021
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
2122

2223
import java.io.IOException;
24+
import java.util.Collection;
25+
import java.util.Iterator;
2326

2427
@RequiredArgsConstructor
2528
public class CustomAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
@@ -47,12 +50,19 @@ protected void successfulAuthentication(final HttpServletRequest request, final
4750
// 기존 토큰 만료 처리
4851
jwtUtil.blacklistTokens(authResult.getName());
4952

53+
final Collection<? extends GrantedAuthority> authorities = authResult.getAuthorities();
54+
final Iterator<? extends GrantedAuthority> iterator = authorities.iterator();
55+
final GrantedAuthority auth = iterator.next();
56+
57+
final String authority = auth.getAuthority();
58+
5059
// 토큰 생성
51-
final TokenBox tokenBox = jwtUtil.generateTokenBox(authResult.getName());
60+
final TokenBox tokenBox = jwtUtil.generateTokenBox(authResult.getName(), authority);
5261

5362
response.setStatus(HttpStatus.OK.value());
5463
response.setHeader("Access-Token", tokenBox.getAccessToken());
5564
response.setHeader("Refresh-Token", tokenBox.getRefreshToken());
65+
response.setHeader("Authority", tokenBox.getAuthority());
5666
}
5767

5868
@Override

src/main/java/dmu/dasom/api/global/auth/jwt/JwtUtil.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,11 @@ public JwtUtil(@Value("${jwt.secret}") final String secretKey, final StringRedis
3838
}
3939

4040
// Access, Refresh 토큰 생성
41-
public TokenBox generateTokenBox(final String email) {
41+
public TokenBox generateTokenBox(final String email, final String authority) {
4242
final TokenBox tokenBox = TokenBox.builder()
4343
.accessToken(generateToken(email, accessTokenExpiration))
4444
.refreshToken(generateToken(email, refreshTokenExpiration))
45+
.authority(authority)
4546
.build();
4647

4748
saveTokens(tokenBox, email);
@@ -132,9 +133,9 @@ public boolean isExpired(final String token) {
132133
}
133134

134135
// Access, Refresh 토큰 갱신
135-
public TokenBox tokenRotation(final UserDetailsImpl userDetails) {
136-
blacklistTokens(userDetails.getUsername());
137-
return generateTokenBox(userDetails.getUsername());
136+
public TokenBox tokenRotation(final String email, final String authority) {
137+
blacklistTokens(email);
138+
return generateTokenBox(email, authority);
138139
}
139140

140141
}

0 commit comments

Comments
 (0)