HttpServletRequest getRemoteAddr() возвращает адрес ipv6, но не может подключиться к нему

У меня есть веб-приложение spring mvc, которое в основном запускает тест селена на клиентской машине.

Я создал селеновый концентратор и узел в клиентской системе, используя следующие команды:

>java -jar selenium-server-standalone-3.0.1.jar -role hub

>java -Dwebdriver.ie.driver=D:\IEDriver\IEDriverServer.exe -jar selenium-server-standalone-3.0.1.jar -role node -hub http://localhost:4444/grid/register -timeout 20 -browserTimeout 60

мой контроллер spring принимает параметры для URL-адреса и запускает тест селена, используя этот параметр в клиентской системе с помощью RemoteWebDriver

вот мой весенний контроллер-

@RequestMapping("/remote-app/{policyNumber}")
    public @ResponseBody String getOIPA(@PathVariable("policyNumber") String polNumber,HttpServletRequest request) throws MalformedURLException
    {
        String clientIp = request.getRemoteAddr();
        System.out.println("Input policy number : "+polNumber);
        System.out.println("Client IP : "+clientIp);
        oipaService.openOipaAddressScreenRemote(polNumber,clientIp);
        return "hello  "+polNumber+"   "+clientIp;
    }

вот мой метод обслуживания, который запускает тесты -

public void openOipaAddressScreenRemote(String policyNumber,String ip) throws MalformedURLException {

        System.out.println("Policy number input : "+policyNumber);
        String oipaURL = "https://mydom.com/PASJava_Term";
        String userName = "user";
        String password = "pwd";

        //-------------------

        String remoteUrlString = "http://"+ip+":4444/wd/hub";
        System.out.println(remoteUrlString);
        DesiredCapabilities caps = DesiredCapabilities.internetExplorer();

        caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

        WebDriver driver = new RemoteWebDriver(new URL(remoteUrlString),caps);


        //-------------------

        driver.get(oipaURL);}

Это дает мне желаемые результаты в клиентских системах моей организации (ПК), которые подключаются к IPv4-адресу клиента.

Но проблема в том, что когда я использую клиенты для ноутбуков в своей организации, он возвращает мне IPv6, к которому приложение не может подключиться.

Они подключаются по именам ноутбуков, например. - lt00123. то есть селен RemoteWebDriver может подключаться к http://lt00123:4444/wd/hub

Как определить адрес клиента (ipv4 или имя машины) по мере необходимости, если это вообще возможно.

РЕДАКТИРОВАТЬ: после использования решения из здесь я решил Проблема с IPv6. И из здесь я обнаружил, что мне нужно настроить концентратор на одном компьютере (желательно на сервере) и узел на клиентском компьютере с использованием концентратора. теперь моему контроллеру Spring не нужно знать адрес клиента. Он уже знает местоположение концентратора.


person Bopsi    schedule 17.11.2016    source источник
comment
возможный дубликат в stackoverflow.com/questions/9882357/   -  person Ye Win    schedule 17.11.2016


Ответы (1)


Исходное решение проблемы находится здесь

Я только что внес небольшие изменения в свой код -

Хаб настроен в месте расположения сервера-

>java -jar selenium-server-standalone-3.0.1.jar -role hub -port 4444

Узел настроен на клиентской машине -

>java -Dwebdriver.ie.driver=D:\IEDriver\IEDriverServer.exe -jar selenium-server-standalone-3.0.1.jar -role node -hub http://[server ip]:4444/grid/register -timeout 20 -browserTimeout 60

Контроллер -

   @RequestMapping("/remote-app/{policyNumber}")
        public @ResponseBody String getOIPA(@PathVariable("policyNumber") String polNumber) throws MalformedURLException
        {
            String clientIp = request.getRemoteAddr();
            System.out.println("Input policy number : "+polNumber);
            oipaService.openOipaAddressScreenRemote(polNumber);
            return "hello  "+polNumber;
        }

Метод обслуживания -

public void openOipaAddressScreenRemote(String policyNumber) throws MalformedURLException {

        System.out.println("Policy number input : "+policyNumber);
        String oipaURL = "https://mydom.com/PASJava_Term";
        String userName = "user";
        String password = "pwd";

        //-------------------

        String remoteUrlString = "http://"+{server ip here}+":4444/wd/hub";
        System.out.println(remoteUrlString);
        DesiredCapabilities caps = DesiredCapabilities.internetExplorer();

        caps.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);

        WebDriver driver = new RemoteWebDriver(new URL(remoteUrlString),caps);


        //-------------------

        driver.get(oipaURL);
}

Теперь моему контроллеру не нужно знать IP-адрес клиента. Вместо того, чтобы использовать один концентратор и один узел на каждой клиентской машине, я использовал один концентратор на сервере и один узел на каждом клиенте.

Теперь я могу тестировать со стороны клиента в клиентской системе на нескольких клиентах.

person Bopsi    schedule 17.11.2016