aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/traccar/helper/ServletHelper.java26
-rw-r--r--src/test/java/org/traccar/helper/ServletHelperTest.java13
2 files changed, 33 insertions, 6 deletions
diff --git a/src/main/java/org/traccar/helper/ServletHelper.java b/src/main/java/org/traccar/helper/ServletHelper.java
index e3481e249..b6c587ec3 100644
--- a/src/main/java/org/traccar/helper/ServletHelper.java
+++ b/src/main/java/org/traccar/helper/ServletHelper.java
@@ -1,8 +1,22 @@
+/*
+ * Copyright 2020 Anton Tananaev (anton@traccar.org)
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package org.traccar.helper;
import javax.servlet.http.HttpServletRequest;
-
public final class ServletHelper {
private ServletHelper() {
@@ -14,10 +28,14 @@ public final class ServletHelper {
String remoteAddress = request.getHeader("X-FORWARDED-FOR");
if (remoteAddress != null && !remoteAddress.isEmpty()) {
- return remoteAddress.substring(0, remoteAddress.indexOf(",")); // removes the additional data
+ int separatorIndex = remoteAddress.indexOf(",");
+ if (separatorIndex > 0) {
+ return remoteAddress.substring(0, separatorIndex); // remove the additional data
+ } else {
+ return remoteAddress;
+ }
} else {
- remoteAddress = request.getRemoteAddr();
- return remoteAddress;
+ return request.getRemoteAddr();
}
} else {
return null;
diff --git a/src/test/java/org/traccar/helper/ServletHelperTest.java b/src/test/java/org/traccar/helper/ServletHelperTest.java
index 7359bf3dd..e419b6491 100644
--- a/src/test/java/org/traccar/helper/ServletHelperTest.java
+++ b/src/test/java/org/traccar/helper/ServletHelperTest.java
@@ -11,7 +11,7 @@ import static org.junit.Assert.assertEquals;
public class ServletHelperTest {
@Test
- public void testIpBehindReverseProxy() {
+ public void testRetrieveRemoteAddressProxyMultiple() {
MockRequest request = new MockRequest();
request.setRemoteAddress("147.120.1.5");
request.addHeader("X-FORWARDED-FOR", "231.23.45.65, 10.20.10.33, 10.20.20.34");
@@ -20,7 +20,16 @@ public class ServletHelperTest {
}
@Test
- public void testNormalIp() {
+ public void testRetrieveRemoteAddressProxySingle() {
+ MockRequest request = new MockRequest();
+ request.setRemoteAddress("147.120.1.5");
+ request.addHeader("X-FORWARDED-FOR", "231.23.45.65");
+
+ assertEquals("231.23.45.65", ServletHelper.retrieveRemoteAddress(request));
+ }
+
+ @Test
+ public void testRetrieveRemoteAddressNoProxy() {
MockRequest request = new MockRequest();
request.setRemoteAddress("231.23.45.65");