|
18 | 18 |
|
19 | 19 | import java.net.InetAddress;
|
20 | 20 | import java.net.UnknownHostException;
|
21 |
| -import java.util.Scanner; |
| 21 | +import java.util.regex.Pattern; |
22 | 22 |
|
23 | 23 | import jakarta.servlet.http.HttpServletRequest;
|
24 | 24 |
|
|
37 | 37 | */
|
38 | 38 | public final class IpAddressMatcher implements RequestMatcher {
|
39 | 39 |
|
| 40 | + private static Pattern IPV4 = Pattern.compile("\\d{0,3}.\\d{0,3}.\\d{0,3}.\\d{0,3}(/\\d{0,3})?"); |
| 41 | + |
40 | 42 | private final int nMaskBits;
|
41 | 43 |
|
42 | 44 | private final InetAddress requiredAddress;
|
@@ -93,16 +95,13 @@ public boolean matches(String address) {
|
93 | 95 | }
|
94 | 96 |
|
95 | 97 | private void assertNotHostName(String ipAddress) {
|
| 98 | + boolean isIpv4 = IPV4.matcher(ipAddress).matches(); |
| 99 | + if (isIpv4) { |
| 100 | + return; |
| 101 | + } |
96 | 102 | String error = "ipAddress " + ipAddress + " doesn't look like an IP Address. Is it a host name?";
|
97 | 103 | Assert.isTrue(ipAddress.charAt(0) == '[' || ipAddress.charAt(0) == ':'
|
98 |
| - || Character.digit(ipAddress.charAt(0), 16) != -1, error); |
99 |
| - if (!ipAddress.contains(":")) { |
100 |
| - Scanner parts = new Scanner(ipAddress); |
101 |
| - parts.useDelimiter("[./]"); |
102 |
| - while (parts.hasNext()) { |
103 |
| - Assert.isTrue(parts.hasNextInt() && parts.nextInt() >> 8 == 0, error); |
104 |
| - } |
105 |
| - } |
| 104 | + || (Character.digit(ipAddress.charAt(0), 16) != -1 && ipAddress.contains(":")), error); |
106 | 105 | }
|
107 | 106 |
|
108 | 107 | private InetAddress parseAddress(String address) {
|
|
0 commit comments