当前位置: 首页 > 知识库问答 >
问题:

spring security重定向登录时,端口8080是从哪里来的?怎么才能改成使用443端口?

甄飞飙
2023-03-14

在我的应用中,当一个URL在requestMap中被列为‘IS _ AUTHENTICATED _ FULLY’时,spring security会拦截并重定向到我们的登录。这是应该的。然而,spring security在登录url中添加了':8080 ',这是不应该的。我需要弄清楚如何修改Spring Security配置参数,以便生成的登录url不包含端口(或者包含默认端口。)

当未登录的用户输入类似于以下内容的url时,就会出现问题:

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

Spring Security性拦截并重定向到登录。url生成如下所示(请注意端口8080):

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

我在配置中添加了我认为正确的配置参数。groovy文件(见下文)。不幸的是,我在生成的url中仍然得到了:8080

当用户还没有登录时,就会发生这种情况。(如果已经成功登录,就没有问题。)我们将RequestmapConfig.groovy用于我们的请求映射,它是在启动时加载的。以下是相关的行:

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/**'])

然而,我认为真正的问题是spring security没有正确地选择配置参数。下面是取自config.groovy的Spring Security参数(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

我本以为Spring Security会生成一个带有端口443而不是端口8080的url:https://whitelabel.innocentive.com:8080/ar/login/index

只是一些背景信息:我们的应用程序过去侦听端口8080,但我们最近转移到AWS云。我们的信息技术已经将应用程序放在侦听80和443的负载均衡器后面。他们不想将8080添加到侦听端口列表中。

共有1个答案

彭畅
2023-03-14

只为那些可能有相同问题的人发布此内容。通过将以下内容添加到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配置确实重新打开了ProxyPervveHost。

(一个小问题,如果我们需要设置服务器.use-forward-headers,尽管我最初有所保留,但应用程序属性是设置它的正确位置。

 类似资料:
  • 我有一个网站<code>www.example。com使用RewriteEngine将HTTP流量重定向到HTTPS: 我发现的问题是谷歌已经索引了这个URL: 给出此错误: 我尝试重定向流量,添加来自80和443虚拟主机的永久重定向: 没有成功。什么是正确的方法来重定向从http://www.example.com:443(和衍生网页)到https://www.example.com的所有流量?

  • 我在设置从8080到端口443的重定向时遇到问题。 场景如下:我有一个负载均衡器,监听端口80和443。对端口80的所有请求都转发到负载均衡器后面主机上的端口8080。对端口443的所有请求都转发到负载均衡器后面主机上的端口8443。 请求端口时http://address.com,它在负载平衡器上使用端口80,在主机上使用端口8080,这里一切正常。 重定向现在应指向https://addres

  • 我在windows虚拟服务器上安装了Jenkins,并希望将其作为windows服务运行。 由于端口8080正被其他服务使用,我在jenkins中将http端口更改为8081。xml文件。但是,我根本无法启动localhost:8081/jenkins。我需要详细的说明/步骤来配置端口8081或运行Jenkins的东西。

  • 我有我的spring网络应用程序,我可以运行与Tomcat。我的问题是,我需要将所有请求从应用程序发送到运行我的tomcat的不同端口。现在tomcat正在localhost:8080上运行,我想将web应用程序的所有请求发送到不同的端口,例如localhost:8081。你能给我一些建议吗? 想要将请求URL从实际请求URL(图像)更改为:http://localhost:8081/pa165/

  • 我也通过命令行运行“netstat-an”,找不到任何关于端口“8080”的记录。

  • ChatGPT登录入口在哪里?