Skip to content
This repository was archived by the owner on Aug 13, 2020. It is now read-only.

Commit c721484

Browse files
authored
Merge pull request #390 from CJSCommonPlatform/setup-1-war
Allow access control to be component-specific
2 parents 29e8b18 + e526454 commit c721484

File tree

15 files changed

+36
-134
lines changed

15 files changed

+36
-134
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,12 @@ on [Keep a CHANGELOG](http://keepachangelog.com/). This project adheres to
55

66
## [Unreleased]
77

8+
### Changed
9+
- Interceptor chain now adds the component name to the context so it can be used by the access control interceptor or anything else that needs it
10+
11+
### Removed
12+
- Access control Provider annotation and annotation scanning; this functionality has moved to the access control library
13+
814
## [2.0.0-rc1]
915

1016
### Changed

core/src/main/java/uk/gov/justice/services/core/accesscontrol/AllowAllPolicyEvaluator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
public class AllowAllPolicyEvaluator implements PolicyEvaluator {
1717

1818
@Override
19-
public Optional<AccessControlViolation> checkAccessPolicyFor(@SuppressWarnings("unused") final JsonEnvelope jsonEnvelope) {
19+
public Optional<AccessControlViolation> checkAccessPolicyFor(final String component,
20+
@SuppressWarnings("unused") final JsonEnvelope jsonEnvelope) {
2021
return empty();
2122
}
2223
}

core/src/main/java/uk/gov/justice/services/core/accesscontrol/DefaultAccessControlService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@ public class DefaultAccessControlService implements AccessControlService {
2121
@Inject
2222
PolicyEvaluator policyEvaluator;
2323

24-
public Optional<AccessControlViolation> checkAccessControl(final JsonEnvelope jsonEnvelope) {
24+
public Optional<AccessControlViolation> checkAccessControl(final String component, final JsonEnvelope jsonEnvelope) {
2525

2626
if (accessControlDisabled()) {
2727
logger.trace("Skipping access control due to configuration");
2828
return empty();
2929
}
3030

3131
logger.trace("Performing access control for action: {}", jsonEnvelope.metadata().name());
32-
return policyEvaluator.checkAccessPolicyFor(jsonEnvelope);
32+
return policyEvaluator.checkAccessPolicyFor(component, jsonEnvelope);
3333
}
3434

3535
private boolean accessControlDisabled() {

core/src/main/java/uk/gov/justice/services/core/accesscontrol/LocalAccessControlInterceptor.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,14 @@ public class LocalAccessControlInterceptor implements Interceptor {
2323
@Override
2424
public InterceptorContext process(final InterceptorContext interceptorContext, final InterceptorChain interceptorChain) {
2525

26-
checkAccessControl(interceptorContext.inputEnvelope());
26+
final String component = interceptorContext.getInputParameter("component").get().toString();
27+
checkAccessControl(component, interceptorContext.inputEnvelope());
2728

2829
return interceptorChain.processNext(interceptorContext);
2930
}
3031

31-
private void checkAccessControl(final JsonEnvelope jsonEnvelope) {
32-
final Optional<AccessControlViolation> accessControlViolation = accessControlService.checkAccessControl(jsonEnvelope);
32+
private void checkAccessControl(final String component, final JsonEnvelope jsonEnvelope) {
33+
final Optional<AccessControlViolation> accessControlViolation = accessControlService.checkAccessControl(component,jsonEnvelope);
3334

3435
if (accessControlViolation.isPresent()) {
3536
final String errorMessage = accessControlFailureMessageGenerator.errorMessageFrom(

core/src/main/java/uk/gov/justice/services/core/extension/AnnotationScanner.java

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import uk.gov.justice.services.core.annotation.Direct;
1313
import uk.gov.justice.services.core.annotation.DirectAdapter;
1414
import uk.gov.justice.services.core.annotation.FrameworkComponent;
15-
import uk.gov.justice.services.core.annotation.Provider;
1615
import uk.gov.justice.services.core.annotation.ServiceComponent;
1716
import uk.gov.justice.services.core.handler.registry.HandlerRegistry;
1817

@@ -51,16 +50,13 @@ <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> pat) {
5150

5251
@SuppressWarnings("unused")
5352
void afterDeploymentValidation(@Observes final AfterDeploymentValidation event, final BeanManager beanManager) {
53+
5454
final Set<Bean<?>> directAdapters = beanManager.getBeans(SynchronousDirectAdapter.class);
5555
allBeansFrom(beanManager)
5656
.filter(this::isServiceComponent)
5757
.filter(bean -> isNotDirectComponentWithoutAdapter(bean, directAdapters))
5858
.forEach(this::processServiceComponentsForEvents);
5959

60-
allBeansFrom(beanManager)
61-
.filter(this::isFrameworkProvider)
62-
.forEach(this::processProviderForEvents);
63-
6460
fireAllCollectedEvents(beanManager);
6561
}
6662

@@ -72,12 +68,6 @@ private boolean isServiceComponent(final Bean<?> bean) {
7268
return isServiceComponent(bean.getBeanClass());
7369
}
7470

75-
76-
private boolean isFrameworkProvider(final Bean<?> bean) {
77-
final Class<?> beanClass = bean.getBeanClass();
78-
return beanClass.isAnnotationPresent(Provider.class);
79-
}
80-
8171
private boolean isServiceComponent(final Class<?> beanClass) {
8272
return beanClass.isAnnotationPresent(ServiceComponent.class)
8373
|| beanClass.isAnnotationPresent(FrameworkComponent.class)
@@ -110,11 +100,6 @@ private boolean isNotDirectComponentWithoutAdapter(final Bean<?> bean, final Set
110100
return true;
111101
}
112102

113-
private void processProviderForEvents(final Bean<?> bean) {
114-
events.add(new ProviderFoundEvent(bean));
115-
LOGGER.info("Identified Access Control Provider {}", bean.getBeanClass().getSimpleName());
116-
}
117-
118103
private void fireAllCollectedEvents(final BeanManager beanManager) {
119104
events.forEach(beanManager::fireEvent);
120105
}

core/src/main/java/uk/gov/justice/services/core/extension/ProviderFoundEvent.java

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

core/src/main/java/uk/gov/justice/services/core/interceptor/DefaultInterceptorChainProcessor.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ public class DefaultInterceptorChainProcessor implements InterceptorChainProcess
2121

2222
@Override
2323
public Optional<JsonEnvelope> process(final InterceptorContext interceptorContext) {
24+
interceptorContext.setInputParameter("component", component);
25+
2426
return new DefaultInterceptorChain(interceptorCache.getInterceptors(component), targetOf(dispatch))
2527
.processNext(interceptorContext)
2628
.outputEnvelope();
@@ -29,10 +31,12 @@ public Optional<JsonEnvelope> process(final InterceptorContext interceptorContex
2931
@Override
3032
@Deprecated
3133
public Optional<JsonEnvelope> process(final JsonEnvelope jsonEnvelope) {
32-
return process(interceptorContextWithInput(jsonEnvelope));
34+
final InterceptorContext context = interceptorContextWithInput(jsonEnvelope);
35+
context.setInputParameter("component", component);
36+
return process(context);
3337
}
3438

3539
private Target targetOf(final Function<JsonEnvelope, JsonEnvelope> dispatch) {
3640
return interceptorContext -> interceptorContext.copyWithOutput(dispatch.apply(interceptorContext.inputEnvelope()));
3741
}
38-
}
42+
}

core/src/test/java/uk/gov/justice/services/core/accesscontrol/AllowAllPolicyEvaluatorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ public void shouldAllowAllAccess() throws Exception {
2222

2323
final JsonEnvelope jsonEnvelope = mock(JsonEnvelope.class);
2424

25-
assertThat(allowAllAccessController.checkAccessPolicyFor(jsonEnvelope).isPresent(), is(false));
25+
assertThat(allowAllAccessController.checkAccessPolicyFor("command", jsonEnvelope).isPresent(), is(false));
2626
}
2727
}

core/src/test/java/uk/gov/justice/services/core/accesscontrol/DefaultAccessControlServiceTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ public void shouldDelegateTheAccessControlLogicToTheAccessController() throws Ex
6262
final Optional<AccessControlViolation> accessControlViolation =
6363
of(mock(AccessControlViolation.class));
6464

65-
when(policyEvaluator.checkAccessPolicyFor(jsonEnvelope)).thenReturn(accessControlViolation);
65+
when(policyEvaluator.checkAccessPolicyFor("command", jsonEnvelope)).thenReturn(accessControlViolation);
6666

67-
assertThat(accessControlService.checkAccessControl(jsonEnvelope),
67+
assertThat(accessControlService.checkAccessControl("command", jsonEnvelope),
6868
is(sameInstance(accessControlViolation)));
6969

7070
assertLogStatement();
@@ -76,7 +76,7 @@ public void shouldIgnoreAccessControlIfTheAccessControlDisabledPropertyIsTrue()
7676
System.setProperty(ACCESS_CONTROL_DISABLED_PROPERTY, "true");
7777

7878
final Optional<AccessControlViolation> accessControlViolation =
79-
accessControlService.checkAccessControl(jsonEnvelope);
79+
accessControlService.checkAccessControl("command", jsonEnvelope);
8080

8181
assertThat(accessControlViolation.isPresent(), is(false));
8282

@@ -93,9 +93,9 @@ public void shouldUseAccessControlIfTheAccessControlDisabledPropertyIsFalse() th
9393
final Optional<AccessControlViolation> accessControlViolation =
9494
of(mock(AccessControlViolation.class));
9595

96-
when(policyEvaluator.checkAccessPolicyFor(jsonEnvelope)).thenReturn(accessControlViolation);
96+
when(policyEvaluator.checkAccessPolicyFor("command", jsonEnvelope)).thenReturn(accessControlViolation);
9797

98-
assertThat(accessControlService.checkAccessControl(jsonEnvelope),
98+
assertThat(accessControlService.checkAccessControl("command", jsonEnvelope),
9999
is(sameInstance(accessControlViolation)));
100100

101101
assertLogStatement();

core/src/test/java/uk/gov/justice/services/core/accesscontrol/LocalAccessControlInterceptorTest.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,21 @@ public void setup() throws Exception {
6464
@Test
6565
public void shouldApplyAccessControlToInputIfLocalComponent() throws Exception {
6666
final InterceptorContext inputContext = interceptorContextWithInput(envelope);
67-
when(accessControlService.checkAccessControl(envelope)).thenReturn(Optional.empty());
67+
inputContext.setInputParameter("component", "command");
68+
69+
when(accessControlService.checkAccessControl("command", envelope)).thenReturn(Optional.empty());
6870

6971
interceptorChain.processNext(inputContext);
70-
verify(accessControlService).checkAccessControl(envelope);
72+
verify(accessControlService).checkAccessControl("command", envelope);
7173
}
7274

7375
@Test
7476
public void shouldThrowAccessControlViolationExceptionIfAccessControlFailsForInput() throws Exception {
7577
final InterceptorContext inputContext = interceptorContextWithInput(envelope);
78+
inputContext.setInputParameter("component", "command");
7679
final AccessControlViolation accessControlViolation = new AccessControlViolation("reason");
7780

78-
when(accessControlService.checkAccessControl(envelope)).thenReturn(Optional.of(accessControlViolation));
81+
when(accessControlService.checkAccessControl("command", envelope)).thenReturn(Optional.of(accessControlViolation));
7982
when(accessControlFailureMessageGenerator.errorMessageFrom(envelope, accessControlViolation)).thenReturn("Error message");
8083

8184
exception.expect(AccessControlViolationException.class);
@@ -102,4 +105,4 @@ public void dummyMethod() {
102105

103106
}
104107
}
105-
}
108+
}

0 commit comments

Comments
 (0)