[英]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.