我正在为我的应用程序使用spring security登录机制并测试了所有内容。这些工作正常。我有以下用例
这是用于将用户重定向到其原始位置的Java代码
final SavedRequest savedRequest = this.requestCache.getRequest(request, response);
targetUrl = savedRequest.getRedirectUrl();
getRedirectStrategy().sendRedirect(request, response, targetUrl);
这里使用的RedirectionStrategy是DefaultRedirectStrategy,事情进展顺利。应用程序现在部署在预生产服务器上,现在看起来不起作用,我收到404错误。
当客户被重定向到主页时,targetUrl
将以" /"出现,我有一个以此映射命名的Spring控制器
@RequestMapping("/")
public class HomePageController{ // home page code }
我的应用程序目前的Pre-Prod urs为prepd-www.mysite.com
因此当sendredirect开始行动时,网页网址将更改为prepd-www.mysite.com/prepd-www.mysite.com
我不确定导致此问题的原因。是因为代理服务器设置? 任何人都可以向我提出这个问题可能的根本原因吗?
我已经在所有本地机器和我们的QA上尝试过了,但一切都运行得很好。
发生这种情况的环境的当前设置是
答案 0 :(得分:1)
您是在预生产tomcat或其他应用服务器中使用吗?通常如果您的战争是调用foo并且您对tomcat的提交,那么这场战争的路径就是
http://localhost:8080/foo/
因此,如果您使用的是servlet,则需要在web.xml中指定主路径为foo / *
答案 1 :(得分:1)
只是一个疯狂的猜测,因为你无法提供反向代理配置,也没有提供前期和开发中使用的确切URL。
您说您正在使用Spring安全性中的DefaultRedirectStrategy
。此策略有一个选项(contextRelative),它将ServletContext路径添加到URL之前。如果在您的开发系统中使用了根上下文,那么如果您正在访问主页(例如):http://localhost:8080/
,则serlet上下文为空。
但是如果现在在preprod中,servlet上下文不再是root,而是说/myApp
一旦由apache反向代理翻译,当你重定向时,你得到一个{{1}的URL这可以转化为你给的东西。
您可以尝试控制/myApp/myApp
中contextRelative
是true
,如果是,则设置为false,并控制是否重定向到绝对或相对URL。
答案 2 :(得分:1)
如果您在前面使用apache检查重写规则并重定向apache配置规则。最好的办法是将ssh隧道直接连接到应用服务器(通过跳过apache)并进行测试。如果它正常工作意味着您的应用程序配置正常,则需要在apache中修复。