Skip to content

Commit c992989

Browse files
author
sberberovic
committed
Merge branch 'feature/21037' into develop
2 parents a1ebe86 + 5f1b77b commit c992989

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

src/main/java/eu/openanalytics/containerproxy/auth/impl/KeycloakAuthenticationBackend.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import javax.inject.Inject;
3131
import javax.servlet.ServletException;
3232

33+
import org.keycloak.OAuth2Constants;
3334
import org.keycloak.adapters.AdapterDeploymentContext;
3435
import org.keycloak.adapters.KeycloakConfigResolver;
3536
import org.keycloak.adapters.KeycloakDeployment;
@@ -43,6 +44,7 @@
4344
import org.keycloak.adapters.springsecurity.authentication.KeycloakLogoutHandler;
4445
import org.keycloak.adapters.springsecurity.filter.KeycloakAuthenticationProcessingFilter;
4546
import org.keycloak.adapters.springsecurity.filter.KeycloakPreAuthActionsFilter;
47+
import org.keycloak.adapters.springsecurity.filter.QueryParamPresenceRequestMatcher;
4648
import org.keycloak.adapters.springsecurity.management.HttpSessionManager;
4749
import org.keycloak.adapters.springsecurity.token.KeycloakAuthenticationToken;
4850
import org.keycloak.representations.IDToken;
@@ -63,6 +65,10 @@
6365
import org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy;
6466
import org.springframework.security.web.authentication.session.SessionAuthenticationStrategy;
6567
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
68+
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
69+
import org.springframework.security.web.util.matcher.OrRequestMatcher;
70+
import org.springframework.security.web.util.matcher.RequestHeaderRequestMatcher;
71+
import org.springframework.security.web.util.matcher.RequestMatcher;
6672
import org.springframework.stereotype.Component;
6773

6874
import eu.openanalytics.containerproxy.auth.IAuthenticationBackend;
@@ -118,7 +124,17 @@ public String getLogoutSuccessURL() {
118124
@Bean
119125
@ConditionalOnProperty(name="proxy.authentication", havingValue="keycloak")
120126
protected KeycloakAuthenticationProcessingFilter keycloakAuthenticationProcessingFilter() throws Exception {
121-
KeycloakAuthenticationProcessingFilter filter = new KeycloakAuthenticationProcessingFilter(authenticationManager);
127+
// Possible solution for issue #21037, create a custom RequestMatcher that doesn't include a QueryParamPresenceRequestMatcher(OAuth2Constants.ACCESS_TOKEN) request matcher.
128+
// The QueryParamPresenceRequestMatcher(OAuth2Constants.ACCESS_TOKEN) caused the HTTP requests to be changed before they where processed.
129+
// Because the HTTP requests are adapted before they are processed, the requested failed to complete successfully and caused an io.undertow.server.TruncatedResponseException
130+
// If in the future we need a RequestMatcher for het ACCESS_TOKEN, we can implement one ourself
131+
RequestMatcher requestMatcher =
132+
new OrRequestMatcher(
133+
new AntPathRequestMatcher(KeycloakAuthenticationProcessingFilter.DEFAULT_LOGIN_URL),
134+
new RequestHeaderRequestMatcher(KeycloakAuthenticationProcessingFilter.AUTHORIZATION_HEADER)
135+
);
136+
137+
KeycloakAuthenticationProcessingFilter filter = new KeycloakAuthenticationProcessingFilter(authenticationManager, requestMatcher);
122138
filter.setSessionAuthenticationStrategy(sessionAuthenticationStrategy());
123139
// Fix: call afterPropertiesSet manually, because Spring doesn't invoke it for some reason.
124140
filter.setApplicationContext(ctx);

src/main/java/eu/openanalytics/containerproxy/service/EventService.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,23 @@
2424
import java.util.concurrent.CopyOnWriteArrayList;
2525
import java.util.function.Consumer;
2626

27+
import org.apache.logging.log4j.LogManager;
28+
import org.apache.logging.log4j.Logger;
2729
import org.springframework.stereotype.Service;
2830

2931
@Service
3032
public class EventService {
31-
33+
private Logger logger = LogManager.getLogger(EventService.class);
34+
3235
private List<Consumer<Event>> listeners = new CopyOnWriteArrayList<>();
3336

3437
public void post(String type, String user, String data) {
38+
logger.debug("Post event [type: " + type + "] [user: " + user + "] [data: " + data + "]");
3539
post(new Event(type, user, System.currentTimeMillis(), data));
3640
}
3741

3842
public void post(Event event) {
43+
logger.debug("Post event [type: " + event.type + "] [user: " + event.user + "] [data: " + event.data + "]");
3944
for (Consumer<Event> listener: listeners) {
4045
listener.accept(event);
4146
}

0 commit comments

Comments
 (0)