Deprecate PortResolver

Closes gh-15972
This commit is contained in:
Rob Winch 2025-02-26 16:10:09 -06:00
parent 76a566265c
commit 9417f02790
No known key found for this signature in database
8 changed files with 67 additions and 0 deletions

View File

@ -102,3 +102,46 @@ Xml::
</b:bean> </b:bean>
---- ----
====== ======
== PortResolver
Spring Security uses an API called `PortResolver` to provide a workaround for a bug in Internet Explorer.
The workaround is no longer necessary and can cause users problems in some scenarios.
For this reason, Spring Security 7 will remove the `PortResolver` interface.
To prepare for this change, users should expose the `PortResolver.NO_OP` as a Bean named `portResolver`.
This ensures that the `PortResolver` implementation that is used is a no-op (e.g. does nothing) which simulates the removal of `PortResolver`.
An example configuration can be found below:
[tabs]
======
Java::
+
[source,java,role="primary"]
----
@Bean
PortResolver portResolver() {
return PortResolver.NO_OP;
}
----
Kotlin::
+
[source,kotlin,role="secondary"]
----
@Bean
open fun portResolver(): PortResolver {
return PortResolver.NO_OP
}
----
Xml::
+
[source,xml,role="secondary"]
----
<util:constant id="portResolver"
static-field="org.springframework.security.web.PortResolver.NO_OP">
----
======

View File

@ -28,7 +28,9 @@ import jakarta.servlet.ServletRequest;
* </p> * </p>
* *
* @author Ben Alex * @author Ben Alex
* @deprecated This existed for an old IE bug and is no longer need.
*/ */
@Deprecated(forRemoval = true, since = "6.5")
public interface PortResolver { public interface PortResolver {
PortResolver NO_OP = new PortResolver() { PortResolver NO_OP = new PortResolver() {

View File

@ -35,7 +35,9 @@ import org.springframework.util.Assert;
* {@link PortMapper}. * {@link PortMapper}.
* *
* @author Ben Alex * @author Ben Alex
* @deprecated This existed for an old IE bug and is no longer need.
*/ */
@Deprecated(forRemoval = true)
public class PortResolverImpl implements PortResolver { public class PortResolverImpl implements PortResolver {
private PortMapper portMapper = new PortMapperImpl(); private PortMapper portMapper = new PortMapperImpl();

View File

@ -86,11 +86,13 @@ public abstract class AbstractRetryEntryPoint implements ChannelEntryPoint {
this.portMapper = portMapper; this.portMapper = portMapper;
} }
@Deprecated(forRemoval = true)
public void setPortResolver(PortResolver portResolver) { public void setPortResolver(PortResolver portResolver) {
Assert.notNull(portResolver, "portResolver cannot be null"); Assert.notNull(portResolver, "portResolver cannot be null");
this.portResolver = portResolver; this.portResolver = portResolver;
} }
@Deprecated(forRemoval = true)
protected final PortResolver getPortResolver() { protected final PortResolver getPortResolver() {
return this.portResolver; return this.portResolver;
} }

View File

@ -235,11 +235,13 @@ public class LoginUrlAuthenticationEntryPoint implements AuthenticationEntryPoin
return this.portMapper; return this.portMapper;
} }
@Deprecated(forRemoval = true)
public void setPortResolver(PortResolver portResolver) { public void setPortResolver(PortResolver portResolver) {
Assert.notNull(portResolver, "portResolver cannot be null"); Assert.notNull(portResolver, "portResolver cannot be null");
this.portResolver = portResolver; this.portResolver = portResolver;
} }
@Deprecated(forRemoval = true)
protected PortResolver getPortResolver() { protected PortResolver getPortResolver() {
return this.portResolver; return this.portResolver;
} }

View File

@ -100,11 +100,21 @@ public class DefaultSavedRequest implements SavedRequest {
private final String matchingRequestParameterName; private final String matchingRequestParameterName;
public DefaultSavedRequest(HttpServletRequest request) {
this(request, (String) null);
}
public DefaultSavedRequest(HttpServletRequest request, String matchingRequestParameterName) {
this(request, PortResolver.NO_OP, matchingRequestParameterName);
}
@Deprecated(forRemoval = true)
public DefaultSavedRequest(HttpServletRequest request, PortResolver portResolver) { public DefaultSavedRequest(HttpServletRequest request, PortResolver portResolver) {
this(request, portResolver, null); this(request, portResolver, null);
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Deprecated(forRemoval = true)
public DefaultSavedRequest(HttpServletRequest request, PortResolver portResolver, public DefaultSavedRequest(HttpServletRequest request, PortResolver portResolver,
String matchingRequestParameterName) { String matchingRequestParameterName) {
Assert.notNull(request, "Request required"); Assert.notNull(request, "Request required");
@ -221,7 +231,10 @@ public class DefaultSavedRequest implements SavedRequest {
* @param request the actual request to be matched against this one * @param request the actual request to be matched against this one
* @param portResolver used to obtain the server port of the request * @param portResolver used to obtain the server port of the request
* @return true if the request is deemed to match this one. * @return true if the request is deemed to match this one.
* @deprecated This is deprecated for removal. Users can compare
* {@link #getRedirectUrl()} to the {@link HttpServletRequest} URL instead.
*/ */
@Deprecated(forRemoval = true)
public boolean doesRequestMatch(HttpServletRequest request, PortResolver portResolver) { public boolean doesRequestMatch(HttpServletRequest request, PortResolver portResolver) {
if (!propertyEquals(this.pathInfo, request.getPathInfo())) { if (!propertyEquals(this.pathInfo, request.getPathInfo())) {
return false; return false;

View File

@ -164,6 +164,7 @@ public class HttpSessionRequestCache implements RequestCache {
this.createSessionAllowed = createSessionAllowed; this.createSessionAllowed = createSessionAllowed;
} }
@Deprecated(forRemoval = true)
public void setPortResolver(PortResolver portResolver) { public void setPortResolver(PortResolver portResolver) {
this.portResolver = portResolver; this.portResolver = portResolver;
} }

View File

@ -25,7 +25,9 @@ import org.springframework.security.web.PortResolver;
* *
* @author Ben Alex * @author Ben Alex
* @author nomoreFt * @author nomoreFt
* @deprecated
*/ */
@Deprecated(forRemoval = true)
public class MockPortResolver implements PortResolver { public class MockPortResolver implements PortResolver {
private static final String HTTPS_SCHEME = "https"; private static final String HTTPS_SCHEME = "https";