为什么端口80在https中添加了Spring Security?

时间:2012-01-10 17:15:27

标签: java tomcat spring-security

登录时,我的应用程序从443重定向到80: 原始网址为 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叫做一个带有http(端口11080)的tomcat。

登录操作由 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存在问题。

一切正常,当原始网址不使用默认https端口443时,没有重定向:https://myhost.com:12345 / myapp / login.jsp

当apache使用协议ajp调用Tomcat时,一切正常。

不幸的是,我必须使用协议http。

在端口443和Tomcat上调用apache

线程Spring Security Https Wrong Port几乎是我的问题,除了我没有使用https调用Tomcat,但使用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 :(得分:0)

问题似乎是指令 response.sendRedirect ,它在Spring安全性中登录,在我的应用程序中注销:

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

为了解决这个问题,我在tomcat中添加了一个阀门,如本文所述:http://blog.inuus.com/vox/2009/04/tomcat-and-ssl-accelerators.html

答案 1 :(得分:0)

接受的答案是建议使用依赖于Microsoft特定标头的自定义阀门( Front-End-Https )。相反,您应该使用已提供的RemoteIpValve并依赖事实上的标准 x-forwarded-proto 标头。

AJP代理无需额外工作的原因是它是一个二进制协议,因此Web服务器/负载均衡器和Tomcat之间没有HTTP调用,因此没有模式/端口更改问题。