diff --git a/core/src/main/java/org/springframework/security/util/PortResolverImpl.java b/core/src/main/java/org/springframework/security/util/PortResolverImpl.java index a2dcc18866..19de64a1ad 100644 --- a/core/src/main/java/org/springframework/security/util/PortResolverImpl.java +++ b/core/src/main/java/org/springframework/security/util/PortResolverImpl.java @@ -15,65 +15,58 @@ package org.springframework.security.util; -import org.springframework.beans.factory.InitializingBean; - import org.springframework.util.Assert; import javax.servlet.ServletRequest; /** - * Concrete implementation of {@link PortResolver} that obtains the port from - * ServletRequest.getServerPort().

This class is capable of handling the IE bug which results in an + * Concrete implementation of {@link PortResolver} that obtains the port from ServletRequest.getServerPort(). + *

+ * This class is capable of handling the IE bug which results in an * incorrect URL being presented in the header subsequent to a redirect to a different scheme and port where the port * is not a well-known number (ie 80 or 443). Handling involves detecting an incorrect response from * ServletRequest.getServerPort() for the scheme (eg a HTTP request on 8443) and then determining the - * real server port (eg HTTP request is really on 8080). The map of valid ports is obtained from the configured {@link - * PortMapper}.

+ * real server port (eg HTTP request is really on 8080). The map of valid ports is obtained from the configured + * {@link PortMapper}. * * @author Ben Alex * @version $Id$ */ -public class PortResolverImpl implements InitializingBean, PortResolver { +public class PortResolverImpl implements PortResolver { //~ Instance fields ================================================================================================ private PortMapper portMapper = new PortMapperImpl(); //~ Methods ======================================================================================================== - public void afterPropertiesSet() throws Exception { - Assert.notNull(portMapper, "portMapper required"); - } - public PortMapper getPortMapper() { return portMapper; } public int getServerPort(ServletRequest request) { - int result = request.getServerPort(); + int serverPort = request.getServerPort(); + Integer portLookup = null; - if ("http".equals(request.getScheme().toLowerCase())) { - Integer http = portMapper.lookupHttpPort(new Integer(result)); + String scheme = request.getScheme().toLowerCase(); - if (http != null) { - // IE 6 bug - result = http.intValue(); - } + if ("http".equals(scheme)) { + portLookup = portMapper.lookupHttpPort(Integer.valueOf(serverPort)); + + } else if ("https".equals(scheme)) { + portLookup = portMapper.lookupHttpsPort(Integer.valueOf(serverPort)); } - if ("https".equals(request.getScheme().toLowerCase())) { - Integer https = portMapper.lookupHttpsPort(new Integer(result)); - - if (https != null) { - // IE 6 bug - result = https.intValue(); - } + if (portLookup != null) { + // IE 6 bug + serverPort = portLookup.intValue(); } - return result; + return serverPort; } public void setPortMapper(PortMapper portMapper) { + Assert.notNull(portMapper, "portMapper cannot be null"); this.portMapper = portMapper; } } diff --git a/core/src/test/java/org/springframework/security/util/PortResolverImplTests.java b/core/src/test/java/org/springframework/security/util/PortResolverImplTests.java index 128ceec0b5..c78fd00fe0 100644 --- a/core/src/test/java/org/springframework/security/util/PortResolverImplTests.java +++ b/core/src/test/java/org/springframework/security/util/PortResolverImplTests.java @@ -39,17 +39,12 @@ public class PortResolverImplTests extends TestCase { //~ Methods ======================================================================================================== - public static void main(String[] args) { - junit.textui.TestRunner.run(PortResolverImplTests.class); - } - public final void setUp() throws Exception { super.setUp(); } public void testDetectsBuggyIeHttpRequest() throws Exception { PortResolverImpl pr = new PortResolverImpl(); - pr.afterPropertiesSet(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setServerPort(8443); @@ -59,7 +54,6 @@ public class PortResolverImplTests extends TestCase { public void testDetectsBuggyIeHttpsRequest() throws Exception { PortResolverImpl pr = new PortResolverImpl(); - pr.afterPropertiesSet(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setServerPort(8080); @@ -69,10 +63,9 @@ public class PortResolverImplTests extends TestCase { public void testDetectsEmptyPortMapper() throws Exception { PortResolverImpl pr = new PortResolverImpl(); - pr.setPortMapper(null); try { - pr.afterPropertiesSet(); + pr.setPortMapper(null); fail("Should have thrown IllegalArgumentException"); } catch (IllegalArgumentException expected) { assertTrue(true); @@ -88,7 +81,6 @@ public class PortResolverImplTests extends TestCase { public void testNormalOperation() throws Exception { PortResolverImpl pr = new PortResolverImpl(); - pr.afterPropertiesSet(); MockHttpServletRequest request = new MockHttpServletRequest(); request.setScheme("http");