当弹簧安全重定向到登录时,端口8080在哪里?如何更改它以使用端口443



在我的应用中,当在requestmap中列出url为'is_authenticatien_flow''时,弹簧安全截距和重定向到我们的登录。这就是应该的。但是,Spring Security正在向登录URL添加":8080",这不应该这样做。我需要弄清楚如何修改弹簧安全配置参数,以便生成的登录URL不包括端口(或包括默认端口。(

当用户中的非遗迹输入类似于以下的URL时,就会发生问题:

https://whitelabel.innocentive.com/ar/workspace/index

弹簧安全截距和重定向登录。URL生成看起来像这样(注意端口8080(:

https://whitelabel.innocentive.com:8080/ar/login/index

我在我们的config.groovy文件中添加了我认为是正确的配置参数(请参见下文(。不幸的是,我仍然在生成的URL

中得到:8080

当用户尚未登录时,这正在发生。(如果已经成功登录,那就没有问题了。(我们使用requestmapconfig.groovy进行我们的requestMaps,该启动时已加载。这是相关的线:

grails
     //Login required
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/board/removesubscription/**'])
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/board/workspace/**'])
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/projectroom/index/**'])
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/workspace/index/**'])
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/federatedLogin/index'])
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/challenge/newChallenge'])
        checkCreateRequestmap([configAttribute: 'IS_AUTHENTICATED_FULLY', url: '/solverCenter/**'])

但是,我认为真正的问题是春季安全性未正确拾取配置参数。这是从config.groovy获取的弹簧安全参数(httpport和httpsport是最后两个:

grails.plugin.springsecurity.userLookup.userDomainClassName = 'Person'
grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'PersonAuthority'
grails.plugin.springsecurity.authority.className = 'Authority'
grails.plugin.springsecurity.requestMap.className = 'Requestmap'
grails.plugin.springsecurity.securityConfigType = 'Requestmap'
grails.plugin.springsecurity.active = true
grails.plugin.springsecurity.successHandler.defaultTargetUrl = '/login/loginRedirection'
// alwaysUseDefaultTargetUrl=false
grails.plugin.springsecurity.auth.loginFormUrl = "/login/index"
grails.plugin.springsecurity.logout.afterLogoutUrl = '/logout/confirmation'
grails.plugin.springsecurity.adh.errorPage = null
// removing these config as we want the default bcrypt algorithm
//grails.plugin.springsecurity.password.algorithm = 'SHA' // Ex. MD5 SHA
//grails.plugin.springsecurity.password.encodeHashAsBase64 = false
//grails.plugin.springsecurity.password.hash.iterations = 1
grails.plugin.springsecurity.userLookup.passwordPropertyName = 'passwd'
grails.plugin.springsecurity.userLookup.accountExpiredPropertyName = null
grails.plugin.springsecurity.userLookup.accountLockedPropertyName = null
grails.plugin.springsecurity.userLookup.passwordExpiredPropertyName = null
grails.plugin.springsecurity.logout.postOnly = false
//grails.plugin.springsecurity.useSessionFixationPrevention = false
grails.plugin.springsecurity.apf.storeLastUsername = true
grails.plugin.springsecurity.rejectIfNoRule = false
grails.plugin.springsecurity.fii.rejectPublicInvocations = false
// added to cause a new jsessionid to be created after login
grails.plugin.springsecurity.useSessionFixationPrevention=true
grails.plugin.springsecurity.sessionFixationPrevention.migrate=false
grails.plugin.springsecurity.sessionFixationPrevention.alwaysCreateSession=true
grails.plugin.springsecurity.portMapper.httpPort = 80
grails.plugin.springsecurity.portMapper.httpsPort = 443

我本来希望春季安全性生成带有端口443而不是端口8080的URL:https://whitelabel.innocentive.com:8080/ar/login/index

只是一些背景信息:我们的应用程序用于在端口8080上收听,但是我们最近搬到了AWS云。我们的应用程序将应用程序放在负载平衡器的后面,该负载平衡器在80和443上听,他们不想将8080添加到侦听端口列表中。

仅针对那些可能有相同问题的人发布此信息。通过将以下内容添加到我们的tomcat Server.xml:

来解决我们的问题。
<Valve className="org.apache.catalina.valves.RemoteIpValve" internalProxies="172.31.d{1,3}.d{1,3}" remoteIpHeader="x-forwarded-for" proxiesHeader="x-forwarded-by" protocolHeader="x-forwarded-proto" httpsServerPort="x-forwarded-port" />

我们的Grails应用程序不需要更改配置,但是我们的Apache Config确实可以重新打开ProxyPreserveHost。

(一个次要注意,如果我们需要设置服务器。使用forward-headers,application.properties是设置它的正确位置,尽管我最初的预订。

最新更新