我很难解决使用Shiro插件(v.1.2.1)的Grails 2.2.5应用程序正在发生的事情。这是一个已经运行了几年的系统。它位于nginx远程代理服务器后面,该服务器迄今一直在监听端口80/443。我们刚刚移动了测试平台,它现在与Apache安装共享一个服务器,它有这些端口,所以我们有nginx监听端口8070的http和8443的https。它在很大程度上起作用,但是当用户未经过身份验证时,重定向存在一些令人费解的问题,而这些问题似乎来自Shiro(虽然我很难确定)。
基本上发生的事情是,当未经身份验证的用户转到“https://myapp.com:8443/admin/”时,Grails应用程序会发出一个重定向,将其带到“https://myapp.com:8443/auth/login?targetUri=%2F” - 即上下文已被删除。它应该是“https://myapp.com:8443/admin/auth/login?targetUri=%2F”,在实时服务器上是如此,它使用标准端口(80/443)。实际上,当我查看响应中的Location标头时,实际响应的是“http://myapp.com:8070/auth/login?targetUri=%2F”(即使用http端口,因为nginx正在处理SSL,这没有问题。)
因为我的代码,在AuthController.groovy中,在收到/ auth / login请求之前实际上没有涉及,这个问题似乎不是来自我的代码中的任何地方,并且必须来自Shiro插入。但是为什么非标准端口会导致这个问题(剥离上下文)?更重要的是,我能做些什么来解决它?
答案 0 :(得分:0)
我想我可能错误地将责任归咎于Shiro或Shiro插件。我已经解决了这个问题,这似乎是由Grails本身的一个怪癖引起的。
在Grails的第1版中,必须在Config.groovy中正确设置grails.serverURL才能使重定向正常工作,但是不再需要版本2,事实上这个属性已经被注释掉了创建了应用。
然而,无论做什么似乎都不适合非标准端口。如果服务器端口类似于8070或8443,那么我使用重定向的方式不正确。
我已通过恢复grails.serverURL并确保正确配置来解决此问题。现在重定向工作,因为他们应该再次工作。