-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #78 from Team-INSERT/security
refactor(auth): spring security & redis를 커스텀 인터셉터로 변경
- Loading branch information
Showing
58 changed files
with
491 additions
and
886 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
src/main/java/com/project/bumawiki/domain/auth/annotation/AdminOnly.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.project.bumawiki.domain.auth.annotation; | ||
|
||
import java.lang.annotation.ElementType; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.RetentionPolicy; | ||
import java.lang.annotation.Target; | ||
|
||
@Target(ElementType.METHOD) | ||
@Retention(RetentionPolicy.RUNTIME) | ||
@LoginRequired | ||
public @interface AdminOnly { | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/com/project/bumawiki/domain/auth/annotation/LoginOrNot.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.project.bumawiki.domain.auth.annotation; | ||
|
||
import java.lang.annotation.ElementType; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.RetentionPolicy; | ||
import java.lang.annotation.Target; | ||
|
||
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) | ||
@Retention(RetentionPolicy.RUNTIME) | ||
public @interface LoginOrNot { | ||
} |
12 changes: 12 additions & 0 deletions
12
src/main/java/com/project/bumawiki/domain/auth/annotation/LoginRequired.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package com.project.bumawiki.domain.auth.annotation; | ||
|
||
import java.lang.annotation.ElementType; | ||
import java.lang.annotation.Retention; | ||
import java.lang.annotation.RetentionPolicy; | ||
import java.lang.annotation.Target; | ||
|
||
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) | ||
@Retention(RetentionPolicy.RUNTIME) | ||
@LoginOrNot | ||
public @interface LoginRequired { | ||
} |
29 changes: 0 additions & 29 deletions
29
src/main/java/com/project/bumawiki/domain/auth/domain/AuthId.java
This file was deleted.
Oops, something went wrong.
39 changes: 0 additions & 39 deletions
39
src/main/java/com/project/bumawiki/domain/auth/domain/RefreshToken.java
This file was deleted.
Oops, something went wrong.
7 changes: 7 additions & 0 deletions
7
src/main/java/com/project/bumawiki/domain/auth/domain/Token.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
package com.project.bumawiki.domain.auth.domain; | ||
|
||
public record Token( | ||
String accessToken, | ||
String refreshToken | ||
) { | ||
} |
12 changes: 0 additions & 12 deletions
12
src/main/java/com/project/bumawiki/domain/auth/domain/repository/AuthIdRepository.java
This file was deleted.
Oops, something went wrong.
13 changes: 0 additions & 13 deletions
13
src/main/java/com/project/bumawiki/domain/auth/domain/repository/RefreshTokenRepository.java
This file was deleted.
Oops, something went wrong.
76 changes: 76 additions & 0 deletions
76
src/main/java/com/project/bumawiki/domain/auth/interceptor/AuthInterceptor.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package com.project.bumawiki.domain.auth.interceptor; | ||
|
||
import static org.springframework.http.HttpHeaders.*; | ||
|
||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.web.method.HandlerMethod; | ||
import org.springframework.web.servlet.HandlerInterceptor; | ||
|
||
import com.project.bumawiki.domain.auth.annotation.AdminOnly; | ||
import com.project.bumawiki.domain.auth.annotation.LoginOrNot; | ||
import com.project.bumawiki.domain.auth.annotation.LoginRequired; | ||
import com.project.bumawiki.domain.auth.service.implementation.AuthReader; | ||
import com.project.bumawiki.domain.auth.service.implementation.AuthUpdater; | ||
import com.project.bumawiki.domain.auth.util.BearerTokenExtractor; | ||
import com.project.bumawiki.domain.auth.util.JwtParser; | ||
import com.project.bumawiki.domain.user.domain.User; | ||
import com.project.bumawiki.domain.user.domain.authority.Authority; | ||
import com.project.bumawiki.domain.user.domain.repository.UserRepository; | ||
import com.project.bumawiki.global.error.exception.BumawikiException; | ||
import com.project.bumawiki.global.error.exception.ErrorCode; | ||
|
||
import jakarta.servlet.http.HttpServletRequest; | ||
import jakarta.servlet.http.HttpServletResponse; | ||
import lombok.NonNull; | ||
import lombok.RequiredArgsConstructor; | ||
|
||
@Configuration | ||
@RequiredArgsConstructor | ||
public class AuthInterceptor implements HandlerInterceptor { | ||
private final JwtParser jwtParser; | ||
private final AuthUpdater authUpdater; | ||
private final AuthReader authReader; | ||
//TODO UserReader로 변경 | ||
private final UserRepository userRepository; | ||
|
||
private static void shouldUserAdmin(User currentUser) { | ||
if (currentUser.getAuthority() != Authority.ADMIN) { | ||
throw new BumawikiException(ErrorCode.USER_NOT_ADMIN); | ||
} | ||
} | ||
|
||
@Override | ||
public boolean preHandle( | ||
@NonNull HttpServletRequest request, | ||
@NonNull HttpServletResponse response, | ||
@NonNull Object handler | ||
) { | ||
if (handler instanceof HandlerMethod hm) { | ||
if (hm.hasMethodAnnotation(LoginOrNot.class)) { | ||
String bearer = request.getHeader(AUTHORIZATION); | ||
|
||
if (bearer == null) { | ||
authUpdater.updateCurrentUser(null); | ||
} else { | ||
String jwt = BearerTokenExtractor.extract(bearer); | ||
Long userId = jwtParser.getIdFromJwt(jwt); | ||
|
||
User user = userRepository.getById(userId); | ||
|
||
authUpdater.updateCurrentUser(user); | ||
} | ||
} | ||
|
||
if (hm.hasMethodAnnotation(LoginRequired.class)) { | ||
if (authReader.getCurrentUser() == null) { | ||
throw new BumawikiException(ErrorCode.USER_NOT_LOGIN); | ||
} | ||
} | ||
if (hm.hasMethodAnnotation(AdminOnly.class)) { | ||
User currentUser = authReader.getCurrentUser(); | ||
shouldUserAdmin(currentUser); | ||
} | ||
} | ||
return true; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
6 changes: 6 additions & 0 deletions
6
src/main/java/com/project/bumawiki/domain/auth/presentation/dto/AccessTokenRequestDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.project.bumawiki.domain.auth.presentation.dto; | ||
|
||
public record AccessTokenRequestDto( | ||
String accessToken | ||
) { | ||
} |
6 changes: 6 additions & 0 deletions
6
src/main/java/com/project/bumawiki/domain/auth/presentation/dto/RefreshTokenRequestDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
package com.project.bumawiki.domain.auth.presentation.dto; | ||
|
||
public record RefreshTokenRequestDto( | ||
String refreshToken | ||
) { | ||
} |
15 changes: 15 additions & 0 deletions
15
src/main/java/com/project/bumawiki/domain/auth/presentation/dto/TokenResponseDto.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
package com.project.bumawiki.domain.auth.presentation.dto; | ||
|
||
import com.project.bumawiki.domain.auth.domain.Token; | ||
|
||
public record TokenResponseDto( | ||
String accessToken, | ||
String refreshToken | ||
) { | ||
public static TokenResponseDto from(Token token) { | ||
return new TokenResponseDto( | ||
token.accessToken(), | ||
token.refreshToken() | ||
); | ||
} | ||
} |
29 changes: 29 additions & 0 deletions
29
src/main/java/com/project/bumawiki/domain/auth/repository/AuthRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package com.project.bumawiki.domain.auth.repository; | ||
|
||
import org.springframework.stereotype.Repository; | ||
import org.springframework.web.context.annotation.RequestScope; | ||
|
||
import com.project.bumawiki.domain.user.domain.User; | ||
import com.project.bumawiki.global.error.exception.BumawikiException; | ||
import com.project.bumawiki.global.error.exception.ErrorCode; | ||
|
||
@Repository | ||
@RequestScope | ||
public class AuthRepository { | ||
private User currentUser; | ||
|
||
public User getCurrentUser() { | ||
if (currentUser == null) { | ||
throw new BumawikiException(ErrorCode.USER_NOT_LOGIN); | ||
} | ||
return currentUser; | ||
} | ||
|
||
public User getNullableCurrentUser() { | ||
return currentUser; | ||
} | ||
|
||
public void updateCurrentUser(User currentUser) { | ||
this.currentUser = currentUser; | ||
} | ||
} |
Oops, something went wrong.