为何无法在普通类的静态方法中获取当前请求的HttpServletRequest对象?

我想弄一个公用的getUser静态方法,这样就不用在每一个controller中都手动将token转成user了

public class UserUtil {
    @Autowired
    private static HttpServletRequest request;

    @Autowired
    private static HttpServletResponse response;

    public static User getUser() {
        return null;
    }

    public static String getUserName() {
        System.out.println(request);
        System.out.println(response);
        String cookieToken =CookieUtils.getCookie(request,"token");
        System.out.println("cookieToken:" + cookieToken);

        String headerToken = request.getHeader("token");
        System.out.println("headerToken:" + headerToken);
        return headerToken;
    }
}

可是这样并不能获取request对象,那应该怎么办呢?

阅读 5.4k
2 个回答

谢谢邀请。

spring mvc在处理请求的时候,会把请求对象放到RequestContextHolder持有的ThreadLocal对象中,你可以去看看DispatcherServlet类的源代码。

//获取到当前线程绑定的请求对象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
@RestController
@RequestMapping("/api")
public class MyController {

    @Autowired
    private UserService userService;

    @GetMapping("/doSomething")
    public void doSomething(HttpServletRequest request) {
        String headerToken = request.getHeader("token");
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题