如何设置请求是否来自移动设备的标记,以便可以在该位置的任何位置使用该标记来处理特定请求。我一开始只能访问HttpServletRequest,而又不想将其传递给调用方法?

最佳答案

您可以使用包含ThreadLocal的Context对象以及静态访问方法来存储此类信息:

public class Context {
  private ThreadLocal<Map<String, String>> ctx = new ThreadLocal<>();

  // initialize it properly

  public static void set(String key, String value) {
    ctx.get().put(key, value);
  }

  public static String get(String key) {
    return ctx.get().get(key);
  }

}



@GetMapping(...)
public void handle(HttpServletrequest req) {
  String agent = determineAgent(req);
  Context.set("agent", agent);

}



现在,您可以通过Context.get("agent")从代码的任何位置访问上下文。

重要说明:处理完每个请求后,请清洁ThreadLocal。当线程将处理另一个请求时,这些值将保持不变!

关于java - 存储请求标记并在以后针对特定请求使用它吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58623025/

10-11 02:38