1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.acegisecurity.ui.webapp;
17
18 import junit.framework.TestCase;
19
20 import org.acegisecurity.MockPortResolver;
21
22 import org.acegisecurity.util.PortMapperImpl;
23
24 import org.springframework.mock.web.MockHttpServletRequest;
25 import org.springframework.mock.web.MockHttpServletResponse;
26
27 import java.util.HashMap;
28 import java.util.Map;
29
30
31
32
33
34
35
36
37
38 public class AuthenticationProcessingFilterEntryPointTests extends TestCase {
39
40
41 public static void main(String[] args) {
42 junit.textui.TestRunner.run(AuthenticationProcessingFilterEntryPointTests.class);
43 }
44
45 public final void setUp() throws Exception {
46 super.setUp();
47 }
48
49 public void testDetectsMissingLoginFormUrl() throws Exception {
50 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
51 ep.setPortMapper(new PortMapperImpl());
52 ep.setPortResolver(new MockPortResolver(80, 443));
53
54 try {
55 ep.afterPropertiesSet();
56 fail("Should have thrown IllegalArgumentException");
57 } catch (IllegalArgumentException expected) {
58 assertEquals("loginFormUrl must be specified", expected.getMessage());
59 }
60 }
61
62 public void testDetectsMissingPortMapper() throws Exception {
63 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
64 ep.setLoginFormUrl("xxx");
65 ep.setPortMapper(null);
66
67 try {
68 ep.afterPropertiesSet();
69 fail("Should have thrown IllegalArgumentException");
70 } catch (IllegalArgumentException expected) {
71 assertEquals("portMapper must be specified", expected.getMessage());
72 }
73 }
74
75 public void testDetectsMissingPortResolver() throws Exception {
76 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
77 ep.setLoginFormUrl("xxx");
78 ep.setPortResolver(null);
79
80 try {
81 ep.afterPropertiesSet();
82 fail("Should have thrown IllegalArgumentException");
83 } catch (IllegalArgumentException expected) {
84 assertEquals("portResolver must be specified", expected.getMessage());
85 }
86 }
87
88 public void testGettersSetters() {
89 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
90 ep.setLoginFormUrl("/hello");
91 ep.setPortMapper(new PortMapperImpl());
92 ep.setPortResolver(new MockPortResolver(8080, 8443));
93 assertEquals("/hello", ep.getLoginFormUrl());
94 assertTrue(ep.getPortMapper() != null);
95 assertTrue(ep.getPortResolver() != null);
96
97 ep.setForceHttps(false);
98 assertFalse(ep.getForceHttps());
99 ep.setForceHttps(true);
100 assertTrue(ep.getForceHttps());
101 }
102
103 public void testHttpsOperationFromOriginalHttpUrl()
104 throws Exception {
105 MockHttpServletRequest request = new MockHttpServletRequest();
106 request.setRequestURI("/some_path");
107 request.setScheme("http");
108 request.setServerName("www.example.com");
109 request.setContextPath("/bigWebApp");
110 request.setServerPort(80);
111
112 MockHttpServletResponse response = new MockHttpServletResponse();
113
114 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
115 ep.setLoginFormUrl("/hello");
116 ep.setPortMapper(new PortMapperImpl());
117 ep.setForceHttps(true);
118 ep.setPortMapper(new PortMapperImpl());
119 ep.setPortResolver(new MockPortResolver(80, 443));
120 ep.afterPropertiesSet();
121
122 ep.commence(request, response, null);
123 assertEquals("https://www.example.com/bigWebApp/hello", response.getRedirectedUrl());
124
125 request.setServerPort(8080);
126 response = new MockHttpServletResponse();
127 ep.setPortResolver(new MockPortResolver(8080, 8443));
128 ep.commence(request, response, null);
129 assertEquals("https://www.example.com:8443/bigWebApp/hello", response.getRedirectedUrl());
130
131
132 request.setServerPort(8888);
133 response = new MockHttpServletResponse();
134 ep.commence(request, response, null);
135 assertEquals("https://www.example.com:8443/bigWebApp/hello", response.getRedirectedUrl());
136
137 PortMapperImpl portMapper = new PortMapperImpl();
138 Map map = new HashMap();
139 map.put("8888", "9999");
140 portMapper.setPortMappings(map);
141 response = new MockHttpServletResponse();
142
143 ep = new AuthenticationProcessingFilterEntryPoint();
144 ep.setLoginFormUrl("/hello");
145 ep.setPortMapper(new PortMapperImpl());
146 ep.setForceHttps(true);
147 ep.setPortMapper(portMapper);
148 ep.setPortResolver(new MockPortResolver(8888, 9999));
149 ep.afterPropertiesSet();
150
151 ep.commence(request, response, null);
152 assertEquals("https://www.example.com:9999/bigWebApp/hello", response.getRedirectedUrl());
153 }
154
155 public void testHttpsOperationFromOriginalHttpsUrl()
156 throws Exception {
157 MockHttpServletRequest request = new MockHttpServletRequest();
158 request.setRequestURI("/some_path");
159 request.setScheme("https");
160 request.setServerName("www.example.com");
161 request.setContextPath("/bigWebApp");
162 request.setServerPort(443);
163
164 MockHttpServletResponse response = new MockHttpServletResponse();
165
166 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
167 ep.setLoginFormUrl("/hello");
168 ep.setPortMapper(new PortMapperImpl());
169 ep.setForceHttps(true);
170 ep.setPortMapper(new PortMapperImpl());
171 ep.setPortResolver(new MockPortResolver(80, 443));
172 ep.afterPropertiesSet();
173
174 ep.commence(request, response, null);
175 assertEquals("https://www.example.com/bigWebApp/hello", response.getRedirectedUrl());
176
177 request.setServerPort(8443);
178 response = new MockHttpServletResponse();
179 ep.setPortResolver(new MockPortResolver(8080, 8443));
180 ep.commence(request, response, null);
181 assertEquals("https://www.example.com:8443/bigWebApp/hello", response.getRedirectedUrl());
182 }
183
184 public void testNormalOperation() throws Exception {
185 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
186 ep.setLoginFormUrl("/hello");
187 ep.setPortMapper(new PortMapperImpl());
188 ep.setPortResolver(new MockPortResolver(80, 443));
189 ep.afterPropertiesSet();
190
191 MockHttpServletRequest request = new MockHttpServletRequest();
192 request.setRequestURI("/some_path");
193 request.setContextPath("/bigWebApp");
194 request.setScheme("http");
195 request.setServerName("www.example.com");
196 request.setContextPath("/bigWebApp");
197 request.setServerPort(80);
198
199 MockHttpServletResponse response = new MockHttpServletResponse();
200
201 ep.afterPropertiesSet();
202 ep.commence(request, response, null);
203 assertEquals("http://www.example.com/bigWebApp/hello", response.getRedirectedUrl());
204 }
205
206 public void testOperationWhenHttpsRequestsButHttpsPortUnknown()
207 throws Exception {
208 AuthenticationProcessingFilterEntryPoint ep = new AuthenticationProcessingFilterEntryPoint();
209 ep.setLoginFormUrl("/hello");
210 ep.setPortMapper(new PortMapperImpl());
211 ep.setPortResolver(new MockPortResolver(8888, 1234));
212 ep.setForceHttps(true);
213 ep.afterPropertiesSet();
214
215 MockHttpServletRequest request = new MockHttpServletRequest();
216 request.setRequestURI("/some_path");
217 request.setContextPath("/bigWebApp");
218 request.setScheme("http");
219 request.setServerName("www.example.com");
220 request.setContextPath("/bigWebApp");
221 request.setServerPort(8888);
222
223 MockHttpServletResponse response = new MockHttpServletResponse();
224
225 ep.afterPropertiesSet();
226 ep.commence(request, response, null);
227
228
229 assertEquals("http://www.example.com:8888/bigWebApp/hello", response.getRedirectedUrl());
230 }
231 }