Skip to content

Commit 9887b49

Browse files
committed
Provide fallback for setDefaultEntryPoint
1 parent 6778c27 commit 9887b49

2 files changed

Lines changed: 40 additions & 1 deletion

File tree

web-sidecar-actuator/src/main/java/software/xdev/sse/web/sidecar/actuator/NoErrorBasicAuthenticationEntryPoint.java

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,28 @@
1616
package software.xdev.sse.web.sidecar.actuator;
1717

1818
import java.lang.reflect.Field;
19+
import java.lang.reflect.Method;
1920

2021
import jakarta.servlet.http.HttpServletRequest;
2122
import jakarta.servlet.http.HttpServletResponse;
2223

24+
import org.slf4j.Logger;
25+
import org.slf4j.LoggerFactory;
2326
import org.springframework.http.HttpStatus;
2427
import org.springframework.security.config.annotation.web.HttpSecurityBuilder;
2528
import org.springframework.security.config.annotation.web.configurers.HttpBasicConfigurer;
2629
import org.springframework.security.core.AuthenticationException;
2730
import org.springframework.security.web.AuthenticationEntryPoint;
2831
import org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint;
32+
import org.springframework.security.web.authentication.HttpStatusEntryPoint;
2933
import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint;
34+
import org.springframework.security.web.util.matcher.RequestHeaderRequestMatcher;
3035

3136

3237
public class NoErrorBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint
3338
{
39+
private static final Logger LOG = LoggerFactory.getLogger(NoErrorBasicAuthenticationEntryPoint.class);
40+
3441
protected NoErrorBasicAuthenticationEntryPoint()
3542
{
3643
}
@@ -76,7 +83,27 @@ public static <B extends HttpSecurityBuilder<B>> HttpBasicConfigurer<B> install(
7683

7784
if(authenticationEntryPoint instanceof final DelegatingAuthenticationEntryPoint delegatingAuthEntryPoint)
7885
{
79-
delegatingAuthEntryPoint.setDefaultEntryPoint(entryPoint);
86+
try
87+
{
88+
final Method mSetDefaultEntryPoint = DelegatingAuthenticationEntryPoint.class.getDeclaredMethod(
89+
"setDefaultEntryPoint",
90+
AuthenticationEntryPoint.class);
91+
mSetDefaultEntryPoint.setAccessible(true);
92+
mSetDefaultEntryPoint.invoke(delegatingAuthEntryPoint, entryPoint);
93+
}
94+
catch(final Exception ex)
95+
{
96+
LOG.debug("setDefaultEntryPoint failed (Spring Boot API changed?) - Trying to use fallback", ex);
97+
98+
// Replace entire implementation
99+
httpBasicConfigurer.authenticationEntryPoint(
100+
DelegatingAuthenticationEntryPoint.builder()
101+
.addEntryPointFor(
102+
new HttpStatusEntryPoint(HttpStatus.UNAUTHORIZED),
103+
new RequestHeaderRequestMatcher("X-Requested-With", "XMLHttpRequest"))
104+
.defaultEntryPoint(entryPoint)
105+
.build());
106+
}
80107
}
81108
}
82109
catch(final NoSuchFieldException | IllegalAccessException e)

web-sidecar-actuator/src/test/java/software/xdev/sse/web/sidecar/actuator/NoErrorBasicAuthenticationEntryPointTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import org.junit.jupiter.api.Test;
2020
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
2121
import org.springframework.security.config.annotation.web.configurers.HttpBasicConfigurer;
22+
import org.springframework.security.web.AuthenticationEntryPoint;
23+
import org.springframework.security.web.authentication.DelegatingAuthenticationEntryPoint;
2224

2325

2426
class NoErrorBasicAuthenticationEntryPointTest
@@ -29,4 +31,14 @@ void checkInstall()
2931
Assertions.assertDoesNotThrow(() ->
3032
NoErrorBasicAuthenticationEntryPoint.install(new HttpBasicConfigurer<HttpSecurity>()));
3133
}
34+
35+
@Test
36+
void setDefaultEntryPointPresent()
37+
{
38+
// setDefaultEntryPoint is deprecated
39+
// If this fails NoErrorBasicAuthenticationEntryPoint.install needs to be modified
40+
Assertions.assertDoesNotThrow(() -> DelegatingAuthenticationEntryPoint.class.getDeclaredMethod(
41+
"setDefaultEntryPoint",
42+
AuthenticationEntryPoint.class));
43+
}
3244
}

0 commit comments

Comments
 (0)