如何从用户请求中获取用户代理?

Joh*_*ohn 3 java spring spring-mvc spring-boot

我必须User-agent从用户请求中获取并添加自定义信息User-agent并将其发回。我有以下控制器:

@RequestMapping("/orders")
@Controller
public class MyController {
    @GetMapping("/new_order")
    public String newOrder(RedirectAttributes redirectAttributes, Model model) {
        if (isUserNotAuthorized()) {
            return getLoginRedirectPage(redirectAttributes, "/login");
        }
        model.addAttribute("order", new Order());
        // How to retrieve User-agent and add some custom info and return it back to the user?
        return "new_order";
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Far*_*han 12

您可以通过以下方式从请求中获取标头

    @GetMapping("/new_order")
    public String newOrder(@RequestHeader(value = "User-Agent") String userAgent, RedirectAttributes redirectAttributes, Model model) {
           //...
    }
Run Code Online (Sandbox Code Playgroud)

要将标头发送回客户端,您可以使用 ResponseEntity

public ResponseEntity<String> newOrder() {
    HttpHeaders responseHeaders = new HttpHeaders();
    responseHeaders.set("User-Agent", "updated-Value");

    return ResponseEntity.ok()
      .headers(responseHeaders)
      .body("New order created.");
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能想使用一个常量:`@RequestHeader(value = HttpHeaders.USER_AGENT)` (4认同)

Pra*_*ant 5

注入HttpServletRequest您的控制器方法。从那里使用HttpServletRequest#getHeader(...)获取您需要的标头。

    @GetMapping("/new_order")
    public String newOrder(RedirectAttributes redirectAttributes, HttpServletRequest request, Model model) {
        String userAgent = request.getHeader("User-Agent");
        if (isUserNotAuthorized()) {
            return getLoginRedirectPage(redirectAttributes, "/login");
        }
        model.addAttribute("order", new Order());
        // How to retrieve User-agent and add some custom info and return it back to the user?
        return "new_order";
    }
Run Code Online (Sandbox Code Playgroud)