我正在使用Apache 2.2,JBoss 7.1.3.Final和Spring 3.2.11.RELEASE。当Spring在我们的一个控制器中发出重定向时会出现这样的情况
return new ModelAndView(new RedirectView(returnUrl+"?lti_errormsg="+msg));
即使原始页面请求包含“https”,新重定向也只包含“http”。我相信这可能与Apache如何连接到JBoss有关,我想知道如何调整我们的设置以便Spring正确地重定向(https用于https请求,http用于http请求)。我们通过AJP连接。这是我们的Apache配置
ProxyErrorOverride On
ProxyPass /myproject/ ajp://localhost:8009/myproject/
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule !/ebook/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R]
非常简单。以下是JBoss中与AJP有关的设置。
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8009"/>
<socket-binding name="http" port="8081"/>
<socket-binding name="https" port="8443"/>
<socket-binding name="osgi-http" interface="management" port="8090"/>
<socket-binding name="remoting" port="4447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>
让我知道我应该包含哪些其他信息或我们需要做什么配置,以便Spring重定向可以正常生效。
谢谢, - 戴夫
编辑:以下是我们如何在apache httpd.conf文件中加载ajp模块
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
答案 0 :(得分:0)
将InternalResourceViewResolver的redirectHttp10Compatible
属性设置为false:
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/" />
<property name="suffix" value=".jsp" />
<property name="redirectHttp10Compatible" value="false" />
</bean>
答案 1 :(得分:0)
您使用的是弹簧安全吗?如果是这样,您可以使用ChannelProcessingFilter强制HTTPS(即,任何到达那里的URL,因为HTTP将被重定向回HTTPS)。
答案 2 :(得分:0)
这就是我们所拥有的(但我们只使用Tomcat)
@RequestMapping(value = "/some_url", method = RequestMethod.POST) public String doSomething(...) { ... return "redirect:/login"; }