@@ -64,4 +64,295 @@ public void ExtractRequestWithProxyHeadersMultipleIPV4()
6464
6565 assertThat (clientIp .equals ("141.246.115.116" ));
6666 }
67+
68+ @ Test
69+ @ DisplayName ("extract ip using x-forwarded-for header ipv6" )
70+ public void ExtractIpUsingXForwardedForHeader ()
71+ {
72+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
73+
74+ MockHttpServletRequest request = new MockHttpServletRequest ();
75+ request .setServerName ("www.securenative.com" );
76+ request .addHeader ("x-forwarded-for" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
77+
78+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
79+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
80+
81+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
82+ }
83+
84+ @ Test
85+ @ DisplayName ("extract ip using x-forwarded-for header multiple ipv4" )
86+ public void ExtractMultipleIpUsingXForwardedForHeader ()
87+ {
88+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
89+
90+ MockHttpServletRequest request = new MockHttpServletRequest ();
91+ request .setServerName ("www.securenative.com" );
92+ request .addHeader ("x-forwarded-for" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
93+
94+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
95+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
96+
97+ assertThat (clientIp .equals ("141.246.115.116" ));
98+ }
99+
100+ @ Test
101+ @ DisplayName ("extract ip using x-client-ip header ipv6" )
102+ public void ExtractIpUsingXClientIpHeader ()
103+ {
104+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
105+
106+ MockHttpServletRequest request = new MockHttpServletRequest ();
107+ request .setServerName ("www.securenative.com" );
108+ request .addHeader ("x-client-ip" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
109+
110+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
111+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
112+
113+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
114+ }
115+
116+ @ Test
117+ @ DisplayName ("extract ip using x-client-ip header multiple ipv4" )
118+ public void ExtractMultipleIpUsingXClientIpHeader ()
119+ {
120+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
121+
122+ MockHttpServletRequest request = new MockHttpServletRequest ();
123+ request .setServerName ("www.securenative.com" );
124+ request .addHeader ("x-client-ip" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
125+
126+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
127+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
128+
129+ assertThat (clientIp .equals ("141.246.115.116" ));
130+ }
131+
132+ @ Test
133+ @ DisplayName ("extract ip using x-real-ip header ipv6" )
134+ public void ExtractIpUsingXRealIpHeader ()
135+ {
136+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
137+
138+ MockHttpServletRequest request = new MockHttpServletRequest ();
139+ request .setServerName ("www.securenative.com" );
140+ request .addHeader ("x-real-ip" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
141+
142+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
143+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
144+
145+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
146+ }
147+
148+ @ Test
149+ @ DisplayName ("extract ip using x-real-ip header multiple ipv4" )
150+ public void ExtractMultipleIpUsingXRealIpHeader ()
151+ {
152+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
153+
154+ MockHttpServletRequest request = new MockHttpServletRequest ();
155+ request .setServerName ("www.securenative.com" );
156+ request .addHeader ("x-real-ip" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
157+
158+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
159+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
160+
161+ assertThat (clientIp .equals ("141.246.115.116" ));
162+ }
163+
164+ @ Test
165+ @ DisplayName ("extract ip using x-forwarded header ipv6" )
166+ public void ExtractIpUsingXForwardedHeader ()
167+ {
168+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
169+
170+ MockHttpServletRequest request = new MockHttpServletRequest ();
171+ request .setServerName ("www.securenative.com" );
172+ request .addHeader ("x-forwarded" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
173+
174+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
175+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
176+
177+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
178+ }
179+
180+ @ Test
181+ @ DisplayName ("extract ip using x-forwarded header multiple ipv4" )
182+ public void ExtractMultipleIpUsingXForwardedHeader ()
183+ {
184+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
185+
186+ MockHttpServletRequest request = new MockHttpServletRequest ();
187+ request .setServerName ("www.securenative.com" );
188+ request .addHeader ("x-forwarded" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
189+
190+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
191+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
192+
193+ assertThat (clientIp .equals ("141.246.115.116" ));
194+ }
195+
196+ @ Test
197+ @ DisplayName ("extract ip using x-cluster-client-ip header ipv6" )
198+ public void ExtractIpUsingXClusterClientIpHeader ()
199+ {
200+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
201+
202+ MockHttpServletRequest request = new MockHttpServletRequest ();
203+ request .setServerName ("www.securenative.com" );
204+ request .addHeader ("x-cluster-client-ip" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
205+
206+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
207+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
208+
209+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
210+ }
211+
212+ @ Test
213+ @ DisplayName ("extract ip using x-cluster-client-ip header multiple ipv4" )
214+ public void ExtractMultipleIpUsingXClusterClientIpHeader ()
215+ {
216+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
217+
218+ MockHttpServletRequest request = new MockHttpServletRequest ();
219+ request .setServerName ("www.securenative.com" );
220+ request .addHeader ("x-cluster-client-ip" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
221+
222+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
223+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
224+
225+ assertThat (clientIp .equals ("141.246.115.116" ));
226+ }
227+
228+ @ Test
229+ @ DisplayName ("extract ip using forwarded-for header ipv6" )
230+ public void ExtractIpUsingForwardedForHeader ()
231+ {
232+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
233+
234+ MockHttpServletRequest request = new MockHttpServletRequest ();
235+ request .setServerName ("www.securenative.com" );
236+ request .addHeader ("forwarded-for" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
237+
238+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
239+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
240+
241+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
242+ }
243+
244+ @ Test
245+ @ DisplayName ("extract ip using forwarded-for header multiple ipv4" )
246+ public void ExtractMultipleIpUsingForwardedForHeader ()
247+ {
248+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
249+
250+ MockHttpServletRequest request = new MockHttpServletRequest ();
251+ request .setServerName ("www.securenative.com" );
252+ request .addHeader ("forwarded-for" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
253+
254+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
255+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
256+
257+ assertThat (clientIp .equals ("141.246.115.116" ));
258+ }
259+
260+ @ Test
261+ @ DisplayName ("extract ip using forwarded header ipv6" )
262+ public void ExtractIpUsingForwardedHeader ()
263+ {
264+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
265+
266+ MockHttpServletRequest request = new MockHttpServletRequest ();
267+ request .setServerName ("www.securenative.com" );
268+ request .addHeader ("forwarded" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
269+
270+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
271+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
272+
273+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
274+ }
275+
276+ @ Test
277+ @ DisplayName ("extract ip using forwarded header multiple ipv4" )
278+ public void ExtractMultipleIpUsingForwardedHeader ()
279+ {
280+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
281+
282+ MockHttpServletRequest request = new MockHttpServletRequest ();
283+ request .setServerName ("www.securenative.com" );
284+ request .addHeader ("forwarded" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
285+
286+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
287+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
288+
289+ assertThat (clientIp .equals ("141.246.115.116" ));
290+ }
291+
292+ @ Test
293+ @ DisplayName ("extract ip using via header ipv6" )
294+ public void ExtractIpUsingViaHeader ()
295+ {
296+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
297+
298+ MockHttpServletRequest request = new MockHttpServletRequest ();
299+ request .setServerName ("www.securenative.com" );
300+ request .addHeader ("via" , "f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" );
301+
302+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
303+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
304+
305+ assertThat (clientIp .equals ("f71f:5bf9:25ff:1883:a8c4:eeff:7b80:aa2d" ));
306+ }
307+
308+ @ Test
309+ @ DisplayName ("extract ip using via header multiple ipv4" )
310+ public void ExtractMultipleIpUsingViaHeader ()
311+ {
312+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
313+
314+ MockHttpServletRequest request = new MockHttpServletRequest ();
315+ request .setServerName ("www.securenative.com" );
316+ request .addHeader ("via" , "141.246.115.116, 203.0.113.1, 12.34.56.3" );
317+
318+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
319+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
320+
321+ assertThat (clientIp .equals ("141.246.115.116" ));
322+ }
323+
324+ @ Test
325+ @ DisplayName ("extract ip using priority with x forwarded for" )
326+ public void ExtractIpUsingPriorityWithXForwardedFor ()
327+ {
328+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
329+
330+ MockHttpServletRequest request = new MockHttpServletRequest ();
331+ request .setServerName ("www.securenative.com" );
332+ request .addHeader ("x-forwarded-for" , "203.0.113.1" );
333+ request .addHeader ("x-real-ip" , "198.51.100.101" );
334+ request .addHeader ("x-client-ip" , "198.51.100.102" );
335+
336+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
337+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
338+
339+ assertThat (clientIp .equals ("203.0.113.1" ));
340+ }
341+
342+ @ Test
343+ @ DisplayName ("extract ip using priority without x forwarded for" )
344+ public void ExtractIpUsingPriorityWithoutXForwardedFor ()
345+ {
346+ SecureNativeOptions options = SecureNativeConfigurationBuilder .defaultConfigBuilder ().build ();
347+
348+ MockHttpServletRequest request = new MockHttpServletRequest ();
349+ request .setServerName ("www.securenative.com" );
350+ request .addHeader ("x-real-ip" , "198.51.100.101" );
351+ request .addHeader ("x-client-ip" , "203.0.113.1, 141.246.115.116, 12.34.56.3" );
352+
353+ Map <String , String > headers = RequestUtils .getHeadersFromRequest (request );
354+ String clientIp = RequestUtils .getClientIpFromRequest (request , headers , options );
355+
356+ assertThat (clientIp .equals ("203.0.113.1" ));
357+ }
67358}
0 commit comments