docs: @FFDCIgnore({ UnknownHostException.class })
      protected boolean verifyLogoutURL(HttpServletRequest req, String exitPage) {
          boolean acceptURL = false;
          boolean allowLogoutPageRedirectToAnyHost = webAppSecurityConfig.getAllowLogoutPageRedirectToAnyHost();
          if (exitPage != null && !exitPage.equals("logon.jsp") && !allowLogoutPageRedirectToAnyHost) {
              String logoutURLHost = null;
              try {
                  InetAddress thisHost = InetAddress.getLocalHost();
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "return from getLocalHost: " + thisHost);
                  String shortName = thisHost.getHostName();
                  String ipAddress = thisHost.getHostAddress();
                  String hostFullName = (ipAddress == null ? shortName : InetAddress.getByName(ipAddress).getHostName());
                  try {
                      URI logoutURL = new URI(exitPage);
                      logoutURLHost = logoutURL.getHost();
                      if (tc.isDebugEnabled())
                          Tr.debug(tc, "domain for exitPage url: " + logoutURLHost);
                      if (!logoutURL.isAbsolute()) {
                          /*
                           * If exitPage starts with "//" , it is a NetworkPath. We need to valid its target host.
                           * While the specification for network paths is preceded by exactly 2 slashes("//"), browsers will
                           * generally redirect network paths with 2 or more preceding slashes. Thus, we need to try to obtain the hostname
                           * utilizing only 2 preceding slashes.
                           */
                          if (tc.isDebugEnabled())
                              Tr.debug(tc, "URI " + exitPage + " is not absolute.");
                          String exitPageTrimmed = exitPage.trim();
                          if (exitPageTrimmed.startsWith("//")) {
                              if (tc.isDebugEnabled())
                                  Tr.debug(tc, "URI " + exitPageTrimmed + " will be processed as a Network-Path." +
                                               " SendRedirect() defines a Network-Path as starting with // ");
                              char[] exitPageCharArr = exitPageTrimmed.toCharArray();
                              for (int i = 0; i < exitPageCharArr.length; i++) {
                                  if (exitPageCharArr[i] != '/') {
                                      URI uri = new URI(exitPageTrimmed.substring(i - 2));
                                      //Set hostname for further checks.
                                      logoutURLHost = uri.getHost();
                                      if (logoutURLHost == null) {
                                          if (tc.isDebugEnabled())
                                              Tr.debug(tc, "SDK indicates " + exitPageTrimmed + " Network-Path does not contain a valid hostname.");
                                      } else {
                                          if (tc.isDebugEnabled())
                                              Tr.debug(tc, "SDK indicates " + exitPageTrimmed + " Network-Path contains a valid hostname," + logoutURLHost);
                                      }
                                      break;
                                  }
                              }
                          } else {
                              //accept a relative URIs that are not Network-Path's
                              acceptURL = true;
                          }
                      }
                  } catch (URISyntaxException urise) {
                      //The URI is invalid and will not be redirected to.
                      if (tc.isDebugEnabled())
                          Tr.debug(tc, "caught URISyntaxException getting urI for exitPage: " + urise.getMessage());
                      acceptURL = false;
                  }
                  if (logoutURLHost != null && acceptURL == false) {
                      acceptURL = isRedirectHostTheSameAsLocalHost(exitPage, logoutURLHost, hostFullName, shortName, ipAddress);
                      if (acceptURL)
                          return acceptURL;
  
                      acceptURL = isLogoutPageMatchDomainNameList(exitPage, logoutURLHost, webAppSecurityConfig.getLogoutPageRedirectDomainList());
                  }
              } catch (UnknownHostException e) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(tc, "caught an unknown exception: " + e.getMessage());
                  acceptURL = false;
              }
              if (!acceptURL && logoutURLHost != null)
                  acceptURL = isRequestURLEqualsExitPageHost(req, logoutURLHost);
          } else {
              if (exitPage != null) {
                  acceptURL = true;
              }
          }
          if (!acceptURL) {
              Tr.error(tc, "SEC_FORM_LOGOUTEXITPAGE_INVALID", new Object[] { req.getRequestURL(), req.getParameter("logoutExitPage") });
          }
          return acceptURL;
      }