Skip to content

Commit 2235a3a

Browse files
Improve KnifeErrorMessages && UserNameNotFoundException Message Management
1) Renamed ErrorMessages to KnifeErrorMessages, now capable of holding the UserDetails object. 2) The displayed message (userMessage) of UserNameNotFoundException is exclusively managed by the UserDetailsService implementation.
1 parent c72d9a9 commit 2235a3a

File tree

16 files changed

+77
-93
lines changed

16 files changed

+77
-93
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package com.patternknife.securityhelper.oauth2.client.config.response.error.exception;
22

3-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
3+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
44

55
public abstract class ErrorMessagesContainedException extends RuntimeException {
66

7-
protected ErrorMessages errorMessages;
7+
protected KnifeErrorMessages knifeErrorMessages;
88

99
public ErrorMessagesContainedException(){
1010

@@ -15,10 +15,10 @@ public ErrorMessagesContainedException(String message){
1515
public ErrorMessagesContainedException(String message, Throwable cause) {
1616
super(message, cause);
1717
}
18-
public ErrorMessagesContainedException(ErrorMessages errorMessages){
19-
this.errorMessages = errorMessages;
18+
public ErrorMessagesContainedException(KnifeErrorMessages knifeErrorMessages){
19+
this.knifeErrorMessages = knifeErrorMessages;
2020
}
21-
public ErrorMessages getErrorMessages() {
22-
return errorMessages;
21+
public KnifeErrorMessages getErrorMessages() {
22+
return knifeErrorMessages;
2323
}
2424
}

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/response/error/exception/data/ResourceNotFoundException.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.patternknife.securityhelper.oauth2.client.config.response.error.exception.data;
22

3-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
3+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
44
import com.patternknife.securityhelper.oauth2.client.config.response.error.exception.ErrorMessagesContainedException;
55
import org.springframework.http.HttpStatus;
66
import org.springframework.web.bind.annotation.ResponseStatus;
@@ -18,7 +18,7 @@ public ResourceNotFoundException(String message, Throwable cause) {
1818
super(message, cause);
1919
}
2020

21-
public ResourceNotFoundException(ErrorMessages errorMessages) {
22-
super(errorMessages);
21+
public ResourceNotFoundException(KnifeErrorMessages knifeErrorMessages) {
22+
super(knifeErrorMessages);
2323
}
2424
}

client/src/main/java/com/patternknife/securityhelper/oauth2/client/config/securityimpl/response/CustomAuthenticationSuccessHandlerImpl.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.DefaultSecurityUserExceptionMessage;
55
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.ISecurityUserExceptionMessageService;
6-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
6+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
77
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.exception.KnifeOauth2AuthenticationException;
88
import jakarta.servlet.http.HttpServletRequest;
99
import jakarta.servlet.http.HttpServletResponse;
@@ -16,7 +16,6 @@
1616
import org.springframework.security.oauth2.core.OAuth2AccessToken;
1717
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
1818
import org.springframework.security.oauth2.core.endpoint.OAuth2AccessTokenResponse;
19-
import org.springframework.security.oauth2.core.endpoint.OAuth2AuthorizationResponse;
2019
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
2120
import org.springframework.security.oauth2.core.http.converter.OAuth2AccessTokenResponseHttpMessageConverter;
2221
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken;
@@ -88,7 +87,7 @@ public void onAuthenticationSuccess(final HttpServletRequest request, final Http
8887
response.getWriter().write(jsonResponse);
8988

9089
} else {
91-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder()
90+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder()
9291
.message("Wrong grant type from Req : " + (String) additionalParameters.get("grant_type"))
9392
.userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_GRANT_TYPE))
9493
.build());

client/src/main/java/com/patternknife/securityhelper/oauth2/client/domain/admin/exception/PasswordFailedExceededOauth2AuthenticationException.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.patternknife.securityhelper.oauth2.client.domain.admin.exception;
22

3-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
3+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
44
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.exception.KnifeOauth2AuthenticationException;
55
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.DefaultSecurityUserExceptionMessage;
66

@@ -13,7 +13,7 @@ public PasswordFailedExceededOauth2AuthenticationException(String message) {
1313
super(message);
1414
}
1515

16-
public PasswordFailedExceededOauth2AuthenticationException(ErrorMessages errorMessages) {
17-
super(errorMessages);
16+
public PasswordFailedExceededOauth2AuthenticationException(KnifeErrorMessages knifeErrorMessages) {
17+
super(knifeErrorMessages);
1818
}
1919
}

client/src/test/java/com/patternknife/securityhelper/oauth2/client/integration/auth/CustomerIntegrationTest.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -476,8 +476,8 @@ public void testLoginWithInvalidCredentials_ORIGINAL() throws Exception {
476476
JSONObject jsonResponse = new JSONObject(responseString);
477477
String userMessage = jsonResponse.getString("userMessage");
478478

479-
assertEquals(userMessage, CustomSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE.getMessage());
480-
479+
//assertEquals(userMessage, CustomSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE.getMessage());
480+
assertTrue(userMessage.contains("NOT Found"));
481481

482482

483483
result = mockMvc.perform(RestDocumentationRequestBuilders.post("/oauth2/token")
@@ -569,9 +569,8 @@ public void testLoginWithInvalidCredentials_EXPOSE() throws Exception {
569569
JSONObject jsonResponse = new JSONObject(responseString);
570570
String userMessage = jsonResponse.getString("userMessage");
571571

572-
assertEquals(userMessage, CustomSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE.getMessage());
573-
574-
572+
// assertEquals(userMessage, CustomSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE.getMessage());
573+
assertTrue(userMessage.contains("NOT Found"));
575574

576575
result = mockMvc.perform(RestDocumentationRequestBuilders.post("/api/v1/traditional-oauth/token")
577576
.header(HttpHeaders.AUTHORIZATION, "Basic " + DatatypeConverter.printBase64Binary((appUserClientId + "wrongcred:" + appUserClientSecret).getBytes("UTF-8")))

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/provider/auth/endpoint/KnifeOauth2AuthenticationProvider.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.exception.KnifeOauth2AuthenticationException;
55
import io.github.patternknife.securityhelper.oauth2.api.config.security.serivce.userdetail.ConditionalDetailsService;
6-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
6+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
77
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.DefaultSecurityUserExceptionMessage;
88
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.ISecurityUserExceptionMessageService;
99
import io.github.patternknife.securityhelper.oauth2.api.config.security.serivce.CommonOAuth2AuthorizationSaver;
@@ -24,7 +24,6 @@
2424
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
2525
import org.springframework.security.oauth2.server.authorization.OAuth2TokenType;
2626
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AccessTokenAuthenticationToken;
27-
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2AuthorizationCodeAuthenticationToken;
2827
import org.springframework.security.oauth2.server.authorization.authentication.OAuth2ClientAuthenticationToken;
2928
import org.springframework.security.oauth2.server.authorization.client.RegisteredClient;
3029

@@ -138,11 +137,11 @@ else if (((String) knifeGrantAuthenticationToken.getAdditionalParameters().get("
138137
throw new KnifeOauth2AuthenticationException();
139138
}
140139
}catch (UsernameNotFoundException e){
141-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder().message(e.getMessage()).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE)).build());
140+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder().message(e.getMessage()).userMessage(e.getMessage()).build());
142141
}catch (KnifeOauth2AuthenticationException e){
143142
throw e;
144143
} catch (Exception e){
145-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder().message(e.getMessage()).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_ERROR)).build());
144+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder().message(e.getMessage()).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_ERROR)).build());
146145
}
147146

148147
}

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/response/auth/authentication/DefaultAuthenticationSuccessHandlerImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.patternknife.securityhelper.oauth2.api.config.security.response.auth.authentication;
22

33

4-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
4+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
55
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.exception.KnifeOauth2AuthenticationException;
66
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.DefaultSecurityUserExceptionMessage;
77
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.ISecurityUserExceptionMessageService;
@@ -64,7 +64,7 @@ public void onAuthenticationSuccess(final HttpServletRequest request, final Http
6464
builder.expiresIn(ChronoUnit.SECONDS.between(Instant.now(), refreshToken.getExpiresAt()));
6565
}
6666
}else{
67-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder().message("Wrong grant type from Req : " + (String)additionalParameters.get("grant_type")).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_GRANT_TYPE)).build());
67+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder().message("Wrong grant type from Req : " + (String)additionalParameters.get("grant_type")).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_GRANT_TYPE)).build());
6868
}
6969

7070

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/response/error/dto/ErrorMessages.java

-33
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto;
2+
3+
import lombok.*;
4+
import org.springframework.security.core.userdetails.UserDetails;
5+
6+
import java.util.Map;
7+
8+
@Getter
9+
@Setter
10+
@ToString
11+
@Builder
12+
@NoArgsConstructor
13+
@AllArgsConstructor
14+
public class KnifeErrorMessages {
15+
16+
private String message;
17+
private String userMessage;
18+
private Map<String, String> userValidationMessage;
19+
private UserDetails userDetails;
20+
21+
}

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/response/error/dto/SecurityKnifeErrorResponsePayload.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ public class SecurityKnifeErrorResponsePayload {
2626
private String cause;
2727

2828

29-
public SecurityKnifeErrorResponsePayload(ErrorMessages errorMessages, Exception e, String details, String stackTrace, String userMessage, Map<String, String> userValidationMessage) {
29+
public SecurityKnifeErrorResponsePayload(KnifeErrorMessages knifeErrorMessages, Exception e, String details, String stackTrace, String userMessage, Map<String, String> userValidationMessage) {
3030
this.timestamp = TimestampUtil.getPayloadTimestamp();
31-
this.message = !StringUtils.isEmpty(errorMessages.getMessage()) ? errorMessages.getMessage() : e.getMessage() ;
31+
this.message = !StringUtils.isEmpty(knifeErrorMessages.getMessage()) ? knifeErrorMessages.getMessage() : e.getMessage() ;
3232
this.details = details;
33-
this.userMessage = !StringUtils.isEmpty(errorMessages.getUserMessage()) ? errorMessages.getUserMessage() : userMessage;
33+
this.userMessage = !StringUtils.isEmpty(knifeErrorMessages.getUserMessage()) ? knifeErrorMessages.getUserMessage() : userMessage;
3434
this.stackTrace = stackTrace;
35-
this.userValidationMessage = errorMessages.getUserValidationMessage() != null && !errorMessages.getUserValidationMessage().isEmpty() ? errorMessages.getUserValidationMessage() : userValidationMessage;
35+
this.userValidationMessage = knifeErrorMessages.getUserValidationMessage() != null && !knifeErrorMessages.getUserValidationMessage().isEmpty() ? knifeErrorMessages.getUserValidationMessage() : userValidationMessage;
3636
}
3737

3838
public SecurityKnifeErrorResponsePayload(String message, String details, String userMessage, String stackTrace) {

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/response/error/exception/KnifeOauth2AuthenticationException.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,29 @@
22

33

44

5-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
5+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
66
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
77

88
/*
99
* Only OAuth2AuthenticationException is allowed to be tossed.
1010
* */
1111
public class KnifeOauth2AuthenticationException extends OAuth2AuthenticationException {
12-
protected ErrorMessages errorMessages;
12+
protected KnifeErrorMessages knifeErrorMessages;
1313

1414
public KnifeOauth2AuthenticationException(){
1515
super("default");
1616
}
1717
public KnifeOauth2AuthenticationException(String message){
1818
super(message);
19-
errorMessages = ErrorMessages.builder().userMessage(message).message(message).build();
19+
knifeErrorMessages = KnifeErrorMessages.builder().userMessage(message).message(message).build();
2020
}
2121

22-
public KnifeOauth2AuthenticationException(ErrorMessages errorMessages){
23-
super(errorMessages.getMessage() == null ? "default" : errorMessages.getMessage());
24-
this.errorMessages = errorMessages;
22+
public KnifeOauth2AuthenticationException(KnifeErrorMessages knifeErrorMessages){
23+
super(knifeErrorMessages.getMessage() == null ? "default" : knifeErrorMessages.getMessage());
24+
this.knifeErrorMessages = knifeErrorMessages;
2525
}
26-
public ErrorMessages getErrorMessages() {
27-
return errorMessages;
26+
public KnifeErrorMessages getErrorMessages() {
27+
return knifeErrorMessages;
2828
}
2929

3030
}

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/serivce/CommonOAuth2AuthorizationSaverImpl.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import io.github.patternknife.securityhelper.oauth2.api.config.logger.KnifeSecurityLogConfig;
55
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.DefaultSecurityUserExceptionMessage;
66
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.ISecurityUserExceptionMessageService;
7-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
7+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
88
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.exception.KnifeOauth2AuthenticationException;
99
import io.github.patternknife.securityhelper.oauth2.api.config.util.KnifeHttpHeaders;
1010
import io.github.patternknife.securityhelper.oauth2.api.config.security.serivce.authentication.OAuth2AuthorizationBuildingService;
@@ -19,7 +19,6 @@
1919
import org.springframework.security.core.userdetails.UserDetails;
2020
import org.springframework.security.oauth2.core.AuthorizationGrantType;
2121
import org.springframework.security.oauth2.core.OAuth2RefreshToken;
22-
import org.springframework.security.oauth2.core.OAuth2Token;
2322
import org.springframework.security.oauth2.core.endpoint.OAuth2ParameterNames;
2423
import org.springframework.security.oauth2.server.authorization.OAuth2Authorization;
2524
import org.springframework.security.oauth2.server.authorization.OAuth2AuthorizationCode;
@@ -108,7 +107,7 @@ public class CommonOAuth2AuthorizationSaverImpl implements CommonOAuth2Authoriza
108107

109108
}, 5, logger, "[Refresh Token] An error occurred with the Key during the execution of persistOAuth2Authorization for " + userDetails.getUsername());
110109
} else {
111-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder().message("Wrong grant type from Req : " + authorizationGrantType.getValue()).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_GRANT_TYPE)).build());
110+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder().message("Wrong grant type from Req : " + authorizationGrantType.getValue()).userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_GRANT_TYPE)).build());
112111
}
113112

114113
return oAuth2Authorization;

lib/src/main/java/io/github/patternknife/securityhelper/oauth2/api/config/security/serivce/DefaultOauth2AuthenticationHashCheckService.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.github.patternknife.securityhelper.oauth2.api.config.security.serivce;
22

33

4-
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.ErrorMessages;
4+
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.dto.KnifeErrorMessages;
55
import io.github.patternknife.securityhelper.oauth2.api.config.security.response.error.exception.KnifeOauth2AuthenticationException;
66
import io.github.patternknife.securityhelper.oauth2.api.config.security.message.DefaultSecurityUserExceptionMessage;
77

@@ -25,7 +25,7 @@ public void validateUsernamePassword(String inputPassword, @Nullable UserDetails
2525
throw new KnifeOauth2AuthenticationException(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_ID_NO_EXISTS));
2626
}
2727
if (!passwordEncoder.matches(inputPassword, userDetails.getPassword())) {
28-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder()
28+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder()
2929
.userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE)).message(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_ID_PASSWORD.getMessage() + " (inputPassword : " + inputPassword + ", input username : " + userDetails.getUsername() + ")").build());
3030
}
3131
}
@@ -35,7 +35,7 @@ public void validateClientCredentials(String inputClientSecret, RegisteredClient
3535
throw new KnifeOauth2AuthenticationException(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_CLIENT_ID_SECRET));
3636
}
3737
if (!passwordEncoder.matches(inputClientSecret, registeredClient.getClientSecret())) {
38-
throw new KnifeOauth2AuthenticationException(ErrorMessages.builder()
38+
throw new KnifeOauth2AuthenticationException(KnifeErrorMessages.builder()
3939
.userMessage(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_LOGIN_FAILURE)).message(iSecurityUserExceptionMessageService.getUserMessage(DefaultSecurityUserExceptionMessage.AUTHENTICATION_WRONG_CLIENT_ID_SECRET) + " (inputClientSecret : " + inputClientSecret+ ")").build());
4040
}
4141
}

0 commit comments

Comments
 (0)