Skip to content

Commit af55a1a

Browse files
committed
refactor : Modified ArgumentResolver to not depend on PayloadAnalysis
1 parent 94e9a1f commit af55a1a

File tree

5 files changed

+62
-131
lines changed

5 files changed

+62
-131
lines changed

src/main/java/io/wwan13/wintersecurity/resolve/RolesResolver.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616

1717
package io.wwan13.wintersecurity.resolve;
1818

19-
import io.wwan13.wintersecurity.jwt.PayloadAnalysis;
2019
import io.wwan13.wintersecurity.jwt.TokenClaims;
2120
import io.wwan13.wintersecurity.resolve.util.AttributeExtractor;
22-
import io.wwan13.wintersecurity.util.TypeConverter;
21+
import io.wwan13.wintersecurity.resolve.util.ResolveTypeConverter;
2322
import org.springframework.core.MethodParameter;
2423
import org.springframework.web.bind.support.WebDataBinderFactory;
2524
import org.springframework.web.context.request.NativeWebRequest;
@@ -32,24 +31,15 @@
3231
public class RolesResolver implements HandlerMethodArgumentResolver {
3332

3433
private final TargetAnnotations targetAnnotations;
35-
private final PayloadAnalysis payloadAnalysis;
3634

37-
public RolesResolver(
38-
TargetAnnotations targetAnnotations,
39-
PayloadAnalysis payloadAnalysis
40-
) {
35+
public RolesResolver(TargetAnnotations targetAnnotations) {
4136
this.targetAnnotations = targetAnnotations;
42-
this.payloadAnalysis = payloadAnalysis;
4337
}
4438

4539
@Override
4640
public boolean supportsParameter(MethodParameter parameter) {
47-
boolean hasAnnotation = targetAnnotations.forRoles().stream()
41+
return targetAnnotations.forRoles().stream()
4842
.anyMatch(parameter::hasParameterAnnotation);
49-
boolean isValidType = payloadAnalysis.roles().getType()
50-
.isAssignableFrom(parameter.getParameterType());
51-
52-
return hasAnnotation && isValidType;
5343
}
5444

5545
@Override
@@ -69,9 +59,9 @@ public Object resolveArgument(
6959
.findFirst()
7060
.orElseThrow(() -> new IllegalArgumentException("Empty role entered"));
7161

72-
return TypeConverter.convertTo(role, parameter.getParameterType());
62+
return ResolveTypeConverter.convertTo(role, parameter.getParameterType());
7363
}
7464

75-
return TypeConverter.convertTo(claims.getRoles(), parameter.getParameterType());
65+
return ResolveTypeConverter.convertTo(claims.getRoles(), parameter.getParameterType());
7666
}
7767
}

src/main/java/io/wwan13/wintersecurity/resolve/SubjectResolver.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616

1717
package io.wwan13.wintersecurity.resolve;
1818

19-
import io.wwan13.wintersecurity.jwt.PayloadAnalysis;
2019
import io.wwan13.wintersecurity.jwt.TokenClaims;
2120
import io.wwan13.wintersecurity.resolve.util.AttributeExtractor;
22-
import io.wwan13.wintersecurity.util.TypeConverter;
21+
import io.wwan13.wintersecurity.resolve.util.ResolveTypeConverter;
2322
import org.springframework.core.MethodParameter;
2423
import org.springframework.web.bind.support.WebDataBinderFactory;
2524
import org.springframework.web.context.request.NativeWebRequest;
@@ -31,24 +30,17 @@
3130
public class SubjectResolver implements HandlerMethodArgumentResolver {
3231

3332
private final TargetAnnotations targetAnnotations;
34-
private final PayloadAnalysis payloadAnalysis;
3533

3634
public SubjectResolver(
37-
TargetAnnotations targetAnnotations,
38-
PayloadAnalysis payloadAnalysis
35+
TargetAnnotations targetAnnotations
3936
) {
4037
this.targetAnnotations = targetAnnotations;
41-
this.payloadAnalysis = payloadAnalysis;
4238
}
4339

4440
@Override
4541
public boolean supportsParameter(MethodParameter parameter) {
46-
boolean hasAnnotation = targetAnnotations.forSubject().stream()
42+
return targetAnnotations.forSubject().stream()
4743
.anyMatch(parameter::hasParameterAnnotation);
48-
boolean isValidType = payloadAnalysis.subject().getType()
49-
.isAssignableFrom(parameter.getParameterType());
50-
51-
return hasAnnotation && isValidType;
5244
}
5345

5446
@Override
@@ -61,7 +53,7 @@ public Object resolveArgument(
6153
HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();
6254
TokenClaims claims = AttributeExtractor.extractClaims(request);
6355

64-
return TypeConverter.convertTo(
56+
return ResolveTypeConverter.convertTo(
6557
claims.getSubject(),
6658
parameter.getParameterType()
6759
);

src/test/java/io/wwan13/wintersecurity/resolve/ResolveTestContainer.java

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,7 @@
1616

1717
package io.wwan13.wintersecurity.resolve;
1818

19-
import io.wwan13.wintersecurity.jwt.PayloadAnalysis;
20-
import io.wwan13.wintersecurity.jwt.PayloadAnalyst;
2119
import io.wwan13.wintersecurity.jwt.TokenClaims;
22-
import io.wwan13.wintersecurity.jwt.payload.annotation.Roles;
23-
import io.wwan13.wintersecurity.jwt.payload.annotation.Subject;
24-
import io.wwan13.wintersecurity.jwt.payload.support.DefaultPayloadAnalyst;
2520

2621
import java.util.Map;
2722
import java.util.Set;
@@ -33,31 +28,10 @@ public class ResolveTestContainer {
3328
Set.of(RequestUserRoles.class)
3429
);
3530

36-
public static PayloadAnalysis payloadAnalysis;
37-
38-
static {
39-
PayloadAnalyst payloadAnalyst = new DefaultPayloadAnalyst();
40-
payloadAnalysis = payloadAnalyst.analyze(ResolveTestPayload.class);
41-
}
42-
4331
public static TokenClaims defaultTestClaims = new TokenClaims(
4432
Map.of(
4533
"sub", "1",
4634
"roles", "ROLE_USER"
4735
)
4836
);
49-
50-
public static class ResolveTestPayload {
51-
@Subject
52-
Long subject;
53-
@Roles
54-
Set<String> roles;
55-
}
56-
57-
public static class ResolveTestPayloadWithStringRole {
58-
@Subject
59-
Long subject;
60-
@Roles
61-
String role;
62-
}
6337
}

src/test/java/io/wwan13/wintersecurity/resolve/RolesResolverTest.java

Lines changed: 27 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616

1717
package io.wwan13.wintersecurity.resolve;
1818

19-
import io.wwan13.wintersecurity.jwt.PayloadAnalysis;
20-
import io.wwan13.wintersecurity.jwt.PayloadAnalyst;
2119
import io.wwan13.wintersecurity.jwt.TokenClaims;
22-
import io.wwan13.wintersecurity.jwt.payload.support.DefaultPayloadAnalyst;
2320
import io.wwan13.wintersecurity.resolve.stub.StubMethodParameter;
2421
import io.wwan13.wintersecurity.resolve.stub.StubModerAndViesContainer;
2522
import io.wwan13.wintersecurity.resolve.stub.StubNativeWebRequest;
@@ -31,21 +28,20 @@
3128
import java.util.Set;
3229

3330
import static org.assertj.core.api.Assertions.assertThat;
31+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
3432

3533
class RolesResolverTest {
3634

3735
static RolesResolver rolesResolver = new RolesResolver(
38-
ResolveTestContainer.targetAnnotations,
39-
ResolveTestContainer.payloadAnalysis
36+
ResolveTestContainer.targetAnnotations
4037
);
4138

4239
@Test
43-
void should_ReturnTrue_when_AnnotationDeclaredWithValidParameterType() {
40+
void should_ReturnTrue_when_AnnotationDeclared() {
4441
// given
4542
final StubMethodParameter methodParameter = new StubMethodParameter();
4643

4744
methodParameter.declaredAnnotationsWillBe(RequestUserRoles.class);
48-
methodParameter.parameterTypeWillBe(Set.class);
4945

5046
// when
5147
boolean result = rolesResolver.supportsParameter(methodParameter);
@@ -54,43 +50,12 @@ void should_ReturnTrue_when_AnnotationDeclaredWithValidParameterType() {
5450
assertThat(result).isTrue();
5551
}
5652

57-
@Test
58-
void should_ReturnFalse_when_InValidParameterType() {
59-
// given
60-
final StubMethodParameter methodParameter = new StubMethodParameter();
61-
62-
methodParameter.declaredAnnotationsWillBe(RequestUserRoles.class);
63-
methodParameter.parameterTypeWillBe(Long.class);
64-
65-
// when
66-
boolean result = rolesResolver.supportsParameter(methodParameter);
67-
68-
// then
69-
assertThat(result).isFalse();
70-
}
71-
7253
@Test
7354
void should_ReturnFalse_when_AnnotationNotDeclared() {
7455
// given
7556
final StubMethodParameter methodParameter = new StubMethodParameter();
7657

7758
methodParameter.declaredAnnotationsWillBe(Set.of());
78-
methodParameter.parameterTypeWillBe(Set.class);
79-
80-
// when
81-
boolean result = rolesResolver.supportsParameter(methodParameter);
82-
83-
// then
84-
assertThat(result).isFalse();
85-
}
86-
87-
@Test
88-
void should_ReturnFalse_when_InValidParameterTypeIsDataType() {
89-
// given
90-
final StubMethodParameter methodParameter = new StubMethodParameter();
91-
92-
methodParameter.declaredAnnotationsWillBe(RequestUserRoles.class);
93-
methodParameter.parameterTypeWillBe(Long.class);
9459

9560
// when
9661
boolean result = rolesResolver.supportsParameter(methodParameter);
@@ -131,16 +96,11 @@ void should_ResolveStringRole_when_NoneCollectionTypeRoleEntered() {
13196
final StubNativeWebRequest nativeWebRequest = new StubNativeWebRequest();
13297
final StubWebDataBinderFactory webDataBinderFactory = new StubWebDataBinderFactory();
13398

134-
final PayloadAnalyst payloadAnalyst = new DefaultPayloadAnalyst();
135-
final PayloadAnalysis payloadAnalysis =
136-
payloadAnalyst.analyze(ResolveTestContainer.ResolveTestPayloadWithStringRole.class);
137-
13899
nativeWebRequest.requestAttributesWillBe(new TokenClaims(Map.of("roles", "ROLE_USER")));
139100
methodParameter.parameterTypeWillBe(String.class);
140101

141102
final RolesResolver rolesResolver = new RolesResolver(
142-
ResolveTestContainer.targetAnnotations,
143-
payloadAnalysis
103+
ResolveTestContainer.targetAnnotations
144104
);
145105

146106
// when
@@ -155,4 +115,27 @@ void should_ResolveStringRole_when_NoneCollectionTypeRoleEntered() {
155115
assertThat(value.getClass()).isAssignableFrom(String.class);
156116
assertThat((String) value).isEqualTo("ROLE_USER");
157117
}
118+
119+
120+
@Test
121+
void should_ThrowException_when_InValidParameterTypeDeclared() {
122+
// given
123+
final StubMethodParameter methodParameter = new StubMethodParameter();
124+
final StubModerAndViesContainer modelAndViewContainer = new StubModerAndViesContainer();
125+
final StubNativeWebRequest nativeWebRequest = new StubNativeWebRequest();
126+
final StubWebDataBinderFactory webDataBinderFactory = new StubWebDataBinderFactory();
127+
128+
nativeWebRequest.requestAttributesWillBe(ResolveTestContainer.defaultTestClaims);
129+
methodParameter.parameterTypeWillBe(Long.class);
130+
131+
// when
132+
assertThatThrownBy(() ->
133+
rolesResolver.resolveArgument(
134+
methodParameter,
135+
modelAndViewContainer,
136+
nativeWebRequest,
137+
webDataBinderFactory
138+
)
139+
).isInstanceOf(IllegalStateException.class);
140+
}
158141
}

src/test/java/io/wwan13/wintersecurity/resolve/SubjectResolverTest.java

Lines changed: 26 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,24 @@
2323
import io.wwan13.wintersecurity.resolve.stub.StubWebDataBinderFactory;
2424
import org.junit.jupiter.api.Test;
2525

26+
import java.util.List;
2627
import java.util.Set;
2728

2829
import static org.assertj.core.api.Assertions.assertThat;
30+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
2931

3032
class SubjectResolverTest extends UnitTest {
3133

3234
static SubjectResolver subjectResolver = new SubjectResolver(
33-
ResolveTestContainer.targetAnnotations,
34-
ResolveTestContainer.payloadAnalysis
35+
ResolveTestContainer.targetAnnotations
3536
);
3637

3738
@Test
38-
void should_ReturnTrue_when_AnnotationDeclaredWithValidParameterType() {
39+
void should_ReturnTrue_when_AnnotationDeclared() {
3940
// given
4041
final StubMethodParameter methodParameter = new StubMethodParameter();
4142

4243
methodParameter.declaredAnnotationsWillBe(RequestUserId.class);
43-
methodParameter.parameterTypeWillBe(Long.class);
4444

4545
// when
4646
boolean result = subjectResolver.supportsParameter(methodParameter);
@@ -49,21 +49,6 @@ void should_ReturnTrue_when_AnnotationDeclaredWithValidParameterType() {
4949
assertThat(result).isTrue();
5050
}
5151

52-
@Test
53-
void should_ReturnFalse_when_InValidParameterType() {
54-
// given
55-
final StubMethodParameter methodParameter = new StubMethodParameter();
56-
57-
methodParameter.declaredAnnotationsWillBe(RequestUserId.class);
58-
methodParameter.parameterTypeWillBe(String.class);
59-
60-
// when
61-
boolean result = subjectResolver.supportsParameter(methodParameter);
62-
63-
// then
64-
assertThat(result).isFalse();
65-
}
66-
6752
@Test
6853
void should_ReturnFalse_when_AnnotationNotDeclared() {
6954
// given
@@ -79,21 +64,6 @@ void should_ReturnFalse_when_AnnotationNotDeclared() {
7964
assertThat(result).isFalse();
8065
}
8166

82-
@Test
83-
void should_ReturnFalse_when_InValidParameterTypeIsDataType() {
84-
// given
85-
final StubMethodParameter methodParameter = new StubMethodParameter();
86-
87-
methodParameter.declaredAnnotationsWillBe(RequestUserId.class);
88-
methodParameter.parameterTypeWillBe(String.class);
89-
90-
// when
91-
boolean result = subjectResolver.supportsParameter(methodParameter);
92-
93-
// then
94-
assertThat(result).isFalse();
95-
}
96-
9767
@Test
9868
void should_ResolveSubject() {
9969
// given
@@ -117,4 +87,26 @@ void should_ResolveSubject() {
11787
assertThat(value.getClass()).isAssignableFrom(Long.class);
11888
assertThat((Long) value).isEqualTo(1L);
11989
}
90+
91+
@Test
92+
void should_ThrowException_when_InValidParameterType() {
93+
// given
94+
final StubMethodParameter methodParameter = new StubMethodParameter();
95+
final StubModerAndViesContainer modelAndViewContainer = new StubModerAndViesContainer();
96+
final StubNativeWebRequest nativeWebRequest = new StubNativeWebRequest();
97+
final StubWebDataBinderFactory webDataBinderFactory = new StubWebDataBinderFactory();
98+
99+
nativeWebRequest.requestAttributesWillBe(ResolveTestContainer.defaultTestClaims);
100+
methodParameter.parameterTypeWillBe(List.class);
101+
102+
// when, then
103+
assertThatThrownBy(() ->
104+
subjectResolver.resolveArgument(
105+
methodParameter,
106+
modelAndViewContainer,
107+
nativeWebRequest,
108+
webDataBinderFactory
109+
)
110+
).isInstanceOf(IllegalStateException.class);
111+
}
120112
}

0 commit comments

Comments
 (0)