Skip to content

Commit 07511ea

Browse files
feature : introduce v3 with new Spring Authorization Server tables
1 parent 0e3a576 commit 07511ea

30 files changed

+608
-576
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<dependency>
88
<groupId>io.github.patternknife.securityhelper.oauth2.api</groupId>
99
<artifactId>spring-security-oauth2-password-jpa-implementation</artifactId>
10-
<version>2.8.1</version>
10+
<version>3.0.0</version>
1111
</dependency>
1212
```
1313
* Set up the same access & refresh token APIs on both ``/oauth2/token`` and on our controller layer such as ``/api/v1/traditional-oauth/token``, both of which function same and have `the same request & response payloads for success and errors`. (However, ``/oauth2/token`` is the standard that "spring-authorization-server" provides.)
@@ -40,7 +40,9 @@
4040
* Authentication management based on a combination of username, client ID, and App-Token
4141
* What is an App-Token? An App-Token is a new access token generated each time the same account logs in. If the token values are the same, the same access token is shared.
4242
* Separated UserDetails implementation for Admin and Customer roles as an example. (This can be extended as desired by implementing ``UserDetailsServiceFactory``)
43-
* Provide MySQL DDL, which consists of oauth\_access\_token, oauth\_refresh\_token and oauth\_client\_details, which is tables in Security 5. As I mean to migrate current security system to Security 6, I haven't changed them to the ``authorization`` table indicated in https://github.com/spring-projects/spring-authorization-server.
43+
* For versions greater than or equal to v3, including the latest version (Spring Security 6), provide MySQL DDL, which consists of ``oauth2_authorization`` and ``oauth2_registered_client``.
44+
* For v2 (Spring Security 5), provide MySQL DDL, which consists of ``oauth_access_token, oauth_refresh_token and oauth_client_details``, which are tables in Security 5. As I meant to migrate current security system to Security 6 back then, I hadn't changed them to the ``oauth2_authorization`` table indicated in https://github.com/spring-projects/spring-authorization-server.
45+
4446
* Application of Spring Rest Docs
4547

4648
## Dependencies

client/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
77
<modelVersion>4.0.0</modelVersion>
88
<groupId>com.patternknife.securityhelper.oauth2.client</groupId>
99
<artifactId>spring-security-oauth2-password-jpa-implementation-client</artifactId>
10-
<version>2.8.1</version>
10+
<version>3.0.0</version>
1111
<packaging>jar</packaging>
1212

1313
<properties>
@@ -48,7 +48,7 @@ http://maven.apache.org/xsd/maven-4.0.0.xsd">
4848
<dependency>
4949
<groupId>io.github.patternknife.securityhelper.oauth2.api</groupId>
5050
<artifactId>spring-security-oauth2-password-jpa-implementation</artifactId>
51-
<version>2.8.1</version>
51+
<version>3.0.0</version>
5252
</dependency>
5353

5454
<!-- DB -->

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/logger/module/ResponseErrorLogConfig.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import com.patternknife.securityhelper.oauth2.client.config.response.error.GlobalExceptionHandler;
44
import com.patternknife.securityhelper.oauth2.client.config.logger.common.CommonLoggingRequest;
55

6-
import com.patternknife.securityhelper.oauth2.client.config.response.error.dto.CustomErrorResponsePayload;
6+
7+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorResponsePayload;
78
import org.aspectj.lang.JoinPoint;
89
import org.aspectj.lang.annotation.AfterReturning;
910
import org.aspectj.lang.annotation.Aspect;
@@ -30,12 +31,12 @@ public void endpointAfterExceptionReturning(JoinPoint p, Object returnValue) {
3031
try {
3132
if (p.getTarget().getClass().equals(GlobalExceptionHandler.class)) {
3233

33-
CustomErrorResponsePayload customErrorResponsePayload = (CustomErrorResponsePayload) ((ResponseEntity) returnValue).getBody();
34+
ErrorResponsePayload errorResponsePayload = (ErrorResponsePayload) ((ResponseEntity) returnValue).getBody();
3435
loggedText += String.format("[After - Error Response]\n message : %s || \n userMessage : %s || \n cause : %s || \n stackTrace : %s",
35-
customErrorResponsePayload != null ? customErrorResponsePayload.getMessage() : "No error message",
36-
customErrorResponsePayload != null ? customErrorResponsePayload.getUserMessage() : "No error userMessage",
37-
customErrorResponsePayload != null ? customErrorResponsePayload.getCause() : "No error detail cause",
38-
customErrorResponsePayload != null ? customErrorResponsePayload.getStackTrace() : "No error detail stack trace");
36+
errorResponsePayload != null ? errorResponsePayload.getMessage() : "No error message",
37+
errorResponsePayload != null ? errorResponsePayload.getUserMessage() : "No error userMessage",
38+
errorResponsePayload != null ? errorResponsePayload.getCause() : "No error detail cause",
39+
errorResponsePayload != null ? errorResponsePayload.getStackTrace() : "No error detail stack trace");
3940
}
4041
} catch (Exception ex4) {
4142

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/response/error/CustomExceptionUtils.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
import com.patternknife.securityhelper.oauth2.client.config.logger.common.CommonLoggingRequest;
44

55
import com.patternknife.securityhelper.oauth2.client.config.logger.module.ResponseSuccessLogConfig;
6-
import com.patternknife.securityhelper.oauth2.client.config.response.error.dto.CustomErrorResponsePayload;
6+
7+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorResponsePayload;
78
import org.apache.commons.lang3.exception.ExceptionUtils;
89
import org.slf4j.Logger;
910
import org.slf4j.LoggerFactory;
@@ -27,10 +28,10 @@ public static void createNonStoppableErrorMessage(String message) {
2728
} catch (Exception ex2) {
2829
logger.error(ex2.getMessage());
2930
} finally {
30-
CustomErrorResponsePayload customErrorResponsePayload = new CustomErrorResponsePayload(message, "Without error param " + " / Thread ID = " + Thread.currentThread().getId() + " / StackTrace",
31+
ErrorResponsePayload errorResponsePayload = new ErrorResponsePayload(message, "Without error param " + " / Thread ID = " + Thread.currentThread().getId() + " / StackTrace",
3132
message, "", "");
3233

33-
logger.error(" / " + customErrorResponsePayload.toString());
34+
logger.error(" / " + errorResponsePayload.toString());
3435
}
3536

3637
}
@@ -45,10 +46,10 @@ public static void createNonStoppableErrorMessage(String message, Throwable ex)
4546
} catch (Exception ex2) {
4647
logger.error(ex2.getMessage());
4748
} finally {
48-
CustomErrorResponsePayload customErrorResponsePayload = new CustomErrorResponsePayload(message, "Without error param " + " / Thread ID = " + Thread.currentThread().getId() + " / StackTrace",
49+
ErrorResponsePayload errorResponsePayload = new ErrorResponsePayload(message, "Without error param " + " / Thread ID = " + Thread.currentThread().getId() + " / StackTrace",
4950
message, CustomExceptionUtils.getAllStackTraces(ex), CustomExceptionUtils.getAllCauses(ex));
5051

51-
logger.error(" / " + customErrorResponsePayload.toString());
52+
logger.error(" / " + errorResponsePayload.toString());
5253
}
5354

5455
}

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/response/error/GlobalExceptionHandler.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.patternknife.securityhelper.oauth2.client.config.response.error;
22

33

4-
import com.patternknife.securityhelper.oauth2.client.config.response.error.dto.CustomErrorResponsePayload;
5-
64
import com.patternknife.securityhelper.oauth2.client.config.response.error.message.GeneralErrorMessage;
75
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.util.ExceptionKnifeUtils;
86
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorResponsePayload;
@@ -63,9 +61,9 @@ public ResponseEntity<?> authorizationException(Exception ex, WebRequest request
6361
// Unhandled
6462
@ExceptionHandler(Exception.class)
6563
public ResponseEntity<?> unhandledExceptionHandler(Exception ex, WebRequest request) {
66-
CustomErrorResponsePayload customErrorResponsePayload = new CustomErrorResponsePayload(ex.getMessage(), request.getDescription(false), GeneralErrorMessage.UNHANDLED_ERROR.getUserMessage(),
64+
ErrorResponsePayload errorResponsePayload = new ErrorResponsePayload(ex.getMessage(), request.getDescription(false), GeneralErrorMessage.UNHANDLED_ERROR.getUserMessage(),
6765
CustomExceptionUtils.getAllStackTraces(ex), CustomExceptionUtils.getAllCauses(ex));
68-
return new ResponseEntity<>(customErrorResponsePayload, HttpStatus.INTERNAL_SERVER_ERROR);
66+
return new ResponseEntity<>(errorResponsePayload, HttpStatus.INTERNAL_SERVER_ERROR);
6967
}
7068

7169
}

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/response/error/dto/CustomErrorResponsePayload.java

Lines changed: 0 additions & 96 deletions
This file was deleted.

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/securityimpl/aop/SecurityPointCutImpl.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33

44
import io.github.patternknife.securityhelper.oauth2.api.config.security.aop.SecurityPointCut;
5-
import io.github.patternknife.securityhelper.oauth2.api.config.security.entity.KnifeOauthAccessToken;
6-
import io.github.patternknife.securityhelper.oauth2.api.config.security.entity.KnifeOauthRefreshToken;
7-
import io.github.patternknife.securityhelper.oauth2.api.config.security.entity.KnifeOauthClientDetail;
85

6+
import io.github.patternknife.securityhelper.oauth2.api.config.security.entity.KnifeAuthorization;
7+
import io.github.patternknife.securityhelper.oauth2.api.config.security.entity.KnifeClient;
98
import jakarta.annotation.Nullable;
109
import lombok.RequiredArgsConstructor;
1110

@@ -14,10 +13,8 @@
1413
@Service
1514
@RequiredArgsConstructor
1615
public class SecurityPointCutImpl implements SecurityPointCut {
17-
1816
@Override
19-
public <T> @Nullable T afterTokensSaved(@Nullable KnifeOauthAccessToken knifeOauthAccessToken, @Nullable KnifeOauthRefreshToken knifeOauthRefreshToken, @Nullable KnifeOauthClientDetail knifeOauthClientDetail) {
20-
17+
public <T> @Nullable T afterTokensSaved(@Nullable KnifeAuthorization knifeAuthorization, @Nullable KnifeClient knifeClient) {
2118
// Implement what you need right after tokens are persisted.
2219
return null;
2320
}

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/securityimpl/serivce/userdetail/AdminDetailsService.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.patternknife.securityhelper.oauth2.client.config.securityimpl.serivce.userdetail;
22

33

4-
import io.github.patternknife.securityhelper.oauth2.api.config.security.dao.KnifeOauthClientDetailRepository;
54
import com.patternknife.securityhelper.oauth2.client.config.securityimpl.guard.AccessTokenUserInfo;
65
import com.patternknife.securityhelper.oauth2.client.config.securityimpl.guard.AdditionalAccessTokenUserInfo;
76

@@ -12,6 +11,7 @@
1211
import com.patternknife.securityhelper.oauth2.client.domain.admin.entity.QAdminRole;
1312
import com.patternknife.securityhelper.oauth2.client.domain.role.entity.QRole;
1413
import com.querydsl.jpa.impl.JPAQueryFactory;
14+
import io.github.patternknife.securityhelper.oauth2.api.config.security.dao.KnifeClientRepository;
1515
import jakarta.persistence.EntityManager;
1616
import jakarta.persistence.PersistenceContext;
1717
import org.springframework.beans.factory.annotation.Qualifier;
@@ -34,16 +34,16 @@ public class AdminDetailsService extends QuerydslRepositorySupport implements Us
3434
private final JPAQueryFactory jpaQueryFactory;
3535

3636
private final AdminRepository adminRepository;
37-
private final KnifeOauthClientDetailRepository knifeOauthClientDetailRepository;
37+
private final KnifeClientRepository knifeClientRepository;
3838

3939
private EntityManager entityManager;
4040

4141
public AdminDetailsService(AdminRepository adminRepository,
42-
@Qualifier("authJpaQueryFactory") JPAQueryFactory jpaQueryFactory, KnifeOauthClientDetailRepository knifeOauthClientDetailRepository) {
42+
@Qualifier("authJpaQueryFactory") JPAQueryFactory jpaQueryFactory, KnifeClientRepository knifeClientRepository) {
4343
super(Admin.class);
4444
this.adminRepository = adminRepository;
4545
this.jpaQueryFactory = jpaQueryFactory;
46-
this.knifeOauthClientDetailRepository = knifeOauthClientDetailRepository;
46+
this.knifeClientRepository = knifeClientRepository;
4747
}
4848

4949
@Override

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/securityimpl/serivce/userdetail/CustomerDetailsService.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.patternknife.securityhelper.oauth2.client.config.securityimpl.serivce.userdetail;
22

33

4-
import io.github.patternknife.securityhelper.oauth2.api.config.security.dao.KnifeOauthClientDetailRepository;
54
import com.patternknife.securityhelper.oauth2.client.config.securityimpl.guard.AccessTokenUserInfo;
65
import com.patternknife.securityhelper.oauth2.client.config.securityimpl.guard.AdditionalAccessTokenUserInfo;
76
import com.patternknife.securityhelper.oauth2.client.config.response.error.exception.auth.UserDeletedException;
@@ -13,6 +12,7 @@
1312
import com.patternknife.securityhelper.oauth2.client.domain.customer.entity.QCustomerRole;
1413
import com.patternknife.securityhelper.oauth2.client.domain.role.entity.QRole;
1514
import com.querydsl.jpa.impl.JPAQueryFactory;
15+
import io.github.patternknife.securityhelper.oauth2.api.config.security.dao.KnifeClientRepository;
1616
import jakarta.persistence.EntityManager;
1717
import jakarta.persistence.PersistenceContext;
1818
import org.springframework.beans.factory.annotation.Qualifier;
@@ -34,15 +34,13 @@ public class CustomerDetailsService extends QuerydslRepositorySupport implements
3434
private final JPAQueryFactory jpaQueryFactory;
3535

3636
private final CustomerRepository customerRepository;
37-
private final KnifeOauthClientDetailRepository knifeOauthClientDetailRepository;
3837

3938
private EntityManager entityManager;
4039

41-
public CustomerDetailsService (CustomerRepository customerRepository, KnifeOauthClientDetailRepository knifeOauthClientDetailRepository,
40+
public CustomerDetailsService (CustomerRepository customerRepository,
4241
@Qualifier("authJpaQueryFactory") JPAQueryFactory jpaQueryFactory) {
4342
super(Customer.class);
4443
this.customerRepository = customerRepository;
45-
this.knifeOauthClientDetailRepository = knifeOauthClientDetailRepository;
4644
this.jpaQueryFactory = jpaQueryFactory;
4745
}
4846

0 commit comments

Comments
 (0)