Spring security oauth2错误地将内部URL用作重定向的当前URI

Spring security oauth2错误地将内部URL用作重定向的当前URI,spring,spring-security,oauth-2.0,Spring,Spring Security,Oauth 2.0,在客户端应用程序希望访问的通过OAuth2保护的远程资源的Spring定义中,我将use current uri设置为true,换句话说,当前uri应该用作重定向(如果可用)。它看起来像: <oauth:resource id="myResourceId" type="authorization_code" client-id="${clientId}" client-secret="${clientSecret}" access-token-uri="${accessTo

在客户端应用程序希望访问的通过OAuth2保护的远程资源的Spring定义中,我将use current uri设置为true,换句话说,当前uri应该用作重定向(如果可用)。它看起来像:

<oauth:resource id="myResourceId" type="authorization_code"
    client-id="${clientId}" client-secret="${clientSecret}"
    access-token-uri="${accessTokenUri}"
    user-authorization-uri="${userAuthorizationUri}"
    use-current-uri="true"
    scope="myScope" 
    pre-established-redirect-uri="${preEstablishedRedirectUri}"/>

现在的问题是,Spring Security OAuth2客户端将获取当前的内部Tomcat URL,而不是公共web应用程序的URL。该场景是位于Apache服务器后面的Tomcat服务器,这会导致两组URL:

  • 公共web应用程序的URL为
  • 内部Tomcat URL是
因为重定向URL是授权服务器(例如Twitter、ORCID)用来发回授权代码的,所以应该使用公共web应用程序的URL,而不是内部URL

顺便说一下,我正在使用以下版本的spring-security-oauth2:

  • spring-security-oauth2-1.0.5.RELEASE
  • 弹簧芯-3.1.2.释放
  • spring-security-core-3.1.3.0版本

想知道是否有办法告诉Spring使用公共URL。谢谢。

在tomcat conf/server.xml的连接器元素中,尝试如下设置面向tomcat的公共URL:

    <Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443"
           proxyName="example.com"
           proxyPort="443" (or whatever port you are using, same goes for scheme )
           scheme="https" />

这样,tomcat的内部getServerName和getServerPort方法将开始提供正确的值,希望这些值能够创建正确的URL

您可能还希望将Web服务器配置为路由位于以下位置的请求: 如果还没有完成,则返回