[英]use HttpServletRequest in my Spring MVC application? Any benefits?
我在我公司的java代碼中遇到了身份驗證代碼。 該應用程序是一組基於Spring MVC構建的REST服務。 在HttpServletRequest對象上的一個名為getHeader()的身份驗證服務中調用了一個方法。 並且該方法檢索AuthId。 為什么他們會在spring MVC應用程序中使用HttpServletRequest? 在spring應用程序中使用此servlet類型代碼有什么好處? 這種方法會做什么? 任何替代品?
Spring MVC構建於Servlet
API之上。 你可以使用Servlet
做任何事情,因此可以使用Spring MVC。 Spring MVC框架提供的是以特定體系結構樣式編寫Web應用程序代碼的包裝器。 這個包裝器增加了行為,有時簡化了任務。
為什么他們會在spring MVC應用程序中使用HttpServletRequest?
在這種情況下,因為它是獲取標頭的最直接方式。
在spring應用程序中使用此servlet類型代碼有什么好處?
Spring不需要包裝任何東西。 你直接從源頭獲得它。
這種方法會做什么?
任何替代品?
在@Controller
類的處理程序方法中,您可以聲明一個使用@RequestHeader
注釋的參數,並讓Spring傳遞一個它從HttpServletRequest
頭中檢索的參數。
默認情況下,這僅限於使用@RequestMapping
注釋的@Controller
方法。 如果您的服務類是HandlerInterceptor
, Filter
或其他類型的類,並且只是對HttpServletRequest
對象的引用,那么除了使用getHeader(String)
直接檢索它之外,您無能為力。
Spring MVC在HttpServletRequest
之上提供了許多精彩的抽象,因此您可以避免其低級實現細節。 您很少需要直接訪問它。
例如,您可以獲得類似Content-Type
的標頭值,如下所示:
@GET
@Path("/myService")
public Response doSomething(@HeaderParam("Content-Type") String contentType) {
...
}
但有時您確實需要直接訪問HttpServletRequest
- 通常在您使用另一個需要它的API時。 如果您正在使用其他需要HttpServletRequest
的方法的其他庫,那么您必須直接從Spring MVC中獲取它。
例如,在此隨機UrlUtil
類中查看此方法:
public static String encodeUrlPathSegment(String pathSegment, HttpServletRequest httpServletRequest) {
//Get a path segment
}
你別無選擇,只能從Spring MVC中獲取HttpServletRequest
。
這是另一種選擇:Spring MVC定義參數注釋@RequestHeader
來讀取httpServletRequest頭:
@RequestMapping(...)
public @ResponseBody String myMethod(@RequestHeader String AuthId){
//the value of the parameter AuthId is the value of request header named AuthId
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.