Springboot: редирект и обратный прокси - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть SpringBoot и SpringMVC внутреннее приложение (внутреннее значение скрыто от Интернета брандмауэром) и служба публичной аутентификации (OAuth2) в DMZ.

I 'm доступ к целевой странице от клиента во внутренней области.На этой странице есть кнопка входа.Когда я нажимаю его, я пересылаю клиента на сервер аутентификации (в DMZ), доступ к которому я могу получить только через прокси.

Я попытался установить переменные env VM:

-Dhttp.proxyHost=xx -Dhttp.proxyPort=yy -Dhttp.proxySet=true

и установка их в System.properties

System.setProperty("http.proxyHost", "http://xx");
System.setProperty("http.proxyPort", "xx");
System.setProperty("http.nonProxyHosts", "localhost|127.0.0.1");

, но оба безрезультатно.

Я также попытался определить bean-компонент SimpleClientHttpRequestFactory:

<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/util 
   http://www.springframework.org/schema/util/spring-util.xsd">

    <bean id="requestFactory"
        class="org.springframework.http.client.SimpleClientHttpRequestFactory">
        <property name="proxy">
            <bean id="proxy" class="java.net.Proxy">
                <constructor-arg>
                    <util:constant static-field="java.net.Proxy.Type.HTTP" />
                </constructor-arg>
                <constructor-arg>
                    <bean class="java.net.InetSocketAddress">
                        <constructor-arg value="xx" />
                        <constructor-arg value="yy" />
                    </bean>
                </constructor-arg>
            </bean>
        </property>
    </bean>

</beans>

безуспешно.

Вопрос

Как я могу настроить Spring для проксирования моего перенаправления?

Спасибо!

1 Ответ

0 голосов
/ 10 декабря 2018

Работает следующим образом (см. restTemplateProxy)

private final String server = "xx";
private final int port = yy;
private final SimpleClientHttpRequestFactory clientHttpReq = new SimpleClientHttpRequestFactory();
private final Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(server, port));
private RestTemplate restTemplateProxy  = null;

{
    clientHttpReq.setProxy(proxy);
    restTemplateProxy = new RestTemplate(clientHttpReq);
}

@RequestMapping(value = "getLightToken", method = RequestMethod.GET)
private String getLightToken(Model model) throws JsonProcessingException, IOException {

    /* Header */
    headers.clear();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
    headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

    /* Body */
    MultiValueMap<String, String> body = new LinkedMultiValueMap<String, String>();     
    body.add(CLIENT_ID.key, CLIENT_ID.val);
    body.add(CLIENT_SECRET.key, CLIENT_SECRET.val);
    body.add(GRANT_TYPE.key, GRANT_TYPE.val);
    body.add(SCOPE.key, SCOPE.val);

    /* Set the body and header of the request  */
    HttpEntity<?> request = new HttpEntity<>(body, headers);

    /* Request Authorisation */
    ResponseEntity<String> response = restTemplateProxy.exchange(BASE_URL + TOKEN_URI, HttpMethod.POST, request, String.class);

    return response.getBody();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...