Почему порт 80 добавлен в Spring Security в https? - PullRequest
0 голосов
/ 10 января 2012

При входе в систему мое приложение перенаправляется с 443 до 80: исходный URL-адрес https://myhost.com/myapp/login.jsp, но при отправке URL-адреса вызывается https: //myhost.com/myapp/j_spring_security_check иуспешный вход в систему, попробуйте подключиться к https : //myhost.com: 80 / myapp /

URL-адрес https: //myhost.com/myapp/login.jsp вызвать сервер apache.Этот Apache называется tomcat с http (порт 11080).

Действие входа выполняется с Spring Security с такой конфигурацией:

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd">
    <global-method-security secured-annotations="enabled">
    </global-method-security>
    <http auto-config="true">
        <intercept-url pattern="/faces/secure/**" access="ROLE_ADMIN" />
        <intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?login_error=1"/>
        <logout logout-success-url="/index.jsp"/>
        <concurrent-session-control max-sessions="1" exception-if-maximum-exceeded="true"/>
    </http>
    <authentication-provider>
        <jdbc-user-service data-source-ref="dataSource"/>
    </authentication-provider>
</beans:beans>

Эта проблема только свход и выход из системы, поэтому я думаю, что Spring Security - это проблема.

Все работает нормально, и перенаправление не выполняется, если исходный URL-адрес не использует порт https 443 по умолчанию: https: //myhost.com: 12345/myapp/login.jsp

Также все работает нормально, когда apache вызывает Tomcat с протоколом ajp.

К сожалению, мне приходится вызывать apache через порт 443 и Tomcat с протоколом http.

Поток Spring Security Https Неверный порт - это почти моя проблема, за исключением того, что я не вызываю Tomcat с https, а с http.

Моя конфигурация Tomcat для соединителей:

<Connector port="11080" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true" />

<Connector port="11009" 
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

Ответы [ 2 ]

0 голосов
/ 13 февраля 2015

В принятом ответе предлагается нестандартный клапан, основанный на заголовке Microsoft ( Front-End-Https ).Вместо этого вы должны использовать уже предоставленный RemoteIpValve и полагаться на стандартный фактический заголовок x-forwarded-proto .

Причина, по которой прокси-сервер AJP работает бездополнительные усилия заключаются в том, что это двоичный протокол, поэтому между веб-сервером / балансировщиком нагрузки и Tomcat нет HTTP-вызова, поэтому нет проблем с изменением схемы / порта.

0 голосов
/ 17 января 2012

Проблема, похоже, заключается в инструкции response.sendRedirect , которая находится в безопасности Spring для входа в систему и в моем приложении для выхода из системы:

response.sendRedirect(response.encodeRedirectURL(finalUrl));

Чтобы решить эту проблему, я добавилклапан в коте, как описано в этой статье: http://blog.inuus.com/vox/2009/04/tomcat-and-ssl-accelerators.html

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