[英]404 with response.sendRedirect
我正在为我的应用程序使用spring安全性登录机制并测试了所有内容。一切正常,我有以下用例
这是用于将用户重定向到其原始位置的Java代码
final SavedRequest savedRequest = this.requestCache.getRequest(request, response);
targetUrl = savedRequest.getRedirectUrl();
getRedirectStrategy().sendRedirect(request, response, targetUrl);
这里使用的RedirectionStrategy是DefaultRedirectStrategy ,一切正常。 现在,应用程序已部署在Pre Production服务器上,现在似乎无法正常工作,并且出现404错误。
当客户被重定向到主页时, targetUrl
为“ /”,我有一个以此映射命名的Spring控制器
@RequestMapping("/")
public class HomePageController{ // home page code }
我的应用程序当前的Pre-Prod urs是prepd-www.mysite.com
因此当sendredirect prepd-www.mysite.com
时,网页URL已更改为prepd-www.mysite.com/prepd-www.mysite.com
我不确定是什么导致了此问题。 是因为代理服务器设置吗? 有人可以建议我这个问题的可能根源吗?
我已经在所有本地计算机上以及在我们的质量检查中都进行了尝试,但是一切工作正常。
目前针对发生这种情况的环境的设置
您是在生产前期的tomcat还是其他应用程序服务器中使用的?通常,如果您的战争正在调用foo并且您对tomcat进行了提交,则这场战争的路径是
http://localhost:8080/foo/
因此,如果您正在使用servlet,则需要在web.xml中指定主路径为foo / *。
只是一个大胆的猜测,因为您无法提供反向代理配置,也无法提供预先生产和开发中使用的确切URL。
您说您正在使用Spring安全性中的DefaultRedirectStrategy
。 该策略具有一个选项(contextRelative),该选项将ServletContext路径添加到URL。 如果在您的开发系统中使用的是根上下文,即您正在访问主页(例如): http://localhost:8080/
则Serlet上下文为空。
但是,如果现在处于preprod中,则servlet上下文不再是根目录,而是说/myApp
曾经由apache反向代理翻译 ,当您重定向时,您将获得/myApp/myApp
的URL,该URL可以翻译回您提供的URL。
您可以尝试控制DefaultRedirectStrategy
contextRelative
是否为true
,如果可以,则设置为false,还可以控制是否重定向到绝对或相对URL。
如果您在前面使用apache,请检查apache配置的重写规则和重定向规则。 最好的方法是直接通过ssh隧道连接到应用程序服务器(通过跳过apache)并进行测试。 如果工作正常,则意味着您的应用程序配置很好,需要在apache中进行修复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.