鍍金池/ 問答/Java  C#/ 為何無法在普通類的靜態(tài)方法中獲取當前請求的HttpServletRequest對

為何無法在普通類的靜態(tài)方法中獲取當前請求的HttpServletRequest對象?

我想弄一個公用的getUser靜態(tài)方法,這樣就不用在每一個controller中都手動將token轉(zhuǎn)成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對象,那應(yīng)該怎么辦呢?

回答
編輯回答
款爺

謝謝邀請。

spring mvc在處理請求的時候,會把請求對象放到RequestContextHolder持有的ThreadLocal對象中,你可以去看看DispatcherServlet類的源代碼。

//獲取到當前線程綁定的請求對象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
2018年6月9日 18:49
編輯回答
鹿惑
@RestController
@RequestMapping("/api")
public class MyController {

    @Autowired
    private UserService userService;

    @GetMapping("/doSomething")
    public void doSomething(HttpServletRequest request) {
        String headerToken = request.getHeader("token");
    }
}
2017年10月27日 05:01