簡體   English   中英

如何在Spring中找到當前webapp的基本URL?

[英]How to find the base URL of the current webapp in Spring?

我想從Controller中找到Spring中webapp的絕對URL。 我知道JSTL c:url,但我需要來自Controller內部的這些信息。

@Controller
public class AuthorizeController {

    @Autowired
    private Authorizer auth;

    @RequestMapping("/auth")
    public String sendToAuthorization() {        
        String baseUrl = "http://localhost:8080/tasks/";
        return "redirect:" +  auth.getAuthorizationUrl(baseUrl);
    }

}

正如您所看到的,baseUrl是硬編碼的,我可以通過Spring配置將它提供給Authorizer類,但我確信可以在Controller中從Spring獲取此信息。 我試圖google“spring mvc url”並找不到解決這個問題的方法。

我認為只有在處理請求時才能獲得絕對 URL,因為您的服務器可能有許多IP地址和域名。

 @RequestMapping("/auth")
    public String sendToAuthorization(HttpServletRequest request) {        
    String baseUrl = String.format("%s://%s:%d/tasks/",request.getScheme(),  request.getServerName(), request.getServerPort());


        return "redirect:" +  auth.getAuthorizationUrl(baseUrl);
    }

至於servlet,它在web.xml中也可能有幾個映射。

類似的問題

PS無論如何,在運行時解析url對我來說並不是一個好主意。

這個答案很晚,但如果你不想將servlet對象推入方法簽名,那么Boris的答案的變體就是使用來自實用程序類/方法的RequestContextHolder 這也將提供抽象回退邏輯的能力(例如,從屬性文件中提取)。 俗氣的例子:

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if(null != requestAttributes && requestAttributes instanceof ServletRequestAttributes) {
  HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
  // build URL from request
}
else {
  // fallback logic if request won't work...
}

這假設您在web.xml注冊為org.springframework.web.context.request.RequestContextListener作為偵聽器

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM