SpringMVC ServletRequestAttributes的應用

  • 2020 年 2 月 13 日
  • 筆記

在SpringMVC的源程式碼中提供了一個封裝過的ThreadLocal,其中保存了每次請求的HttpServletRequest對象,(詳細請看org.springframework.web.context.request.ServletRequestAttributes的源程式碼) 。

這樣我們就可以進行簡單封裝一下寫一個工具進行使用:

import lombok.extern.slf4j.Slf4j;  import org.slf4j.Logger;  import org.slf4j.LoggerFactory;  import org.springframework.web.context.request.RequestAttributes;  import org.springframework.web.context.request.RequestContextHolder;  import org.springframework.web.context.request.ServletRequestAttributes;    import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import javax.servlet.http.HttpSession;      @Slf4j  public class RequestHolder {        /**       * 獲取request       *       * @return HttpServletRequest       */      public static HttpServletRequest getRequest() {          log.debug("getRequest -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());          if (null == servletRequestAttributes) {              return null;          }          return servletRequestAttributes.getRequest();      }        /**       * 獲取Response       *       * @return HttpServletRequest       */      public static HttpServletResponse getResponse() {          log.debug("getResponse -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());          if (null == servletRequestAttributes) {              return null;          }          return servletRequestAttributes.getResponse();      }        /**       * 獲取session       *       * @return HttpSession       */      public static HttpSession getSession() {          log.debug("getSession -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          HttpServletRequest request = null;          if (null == (request = getRequest())) {              return null;          }          return request.getSession();      }        /**       * 獲取session的Attribute       *       * @param name session的key       * @return Object       */      public static Object getSession(String name) {          log.debug("getSession -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());          if (null == servletRequestAttributes) {              return null;          }          return servletRequestAttributes.getAttribute(name, RequestAttributes.SCOPE_SESSION);      }        /**       * 添加session       *       * @param name       * @param value       */      public static void setSession(String name, Object value) {          log.debug("setSession -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());          if (null == servletRequestAttributes) {              return;          }          servletRequestAttributes.setAttribute(name, value, RequestAttributes.SCOPE_SESSION);      }        /**       * 清除指定session       *       * @param name       * @return void       */      public static void removeSession(String name) {          log.debug("removeSession -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());          if (null == servletRequestAttributes) {              return;          }          servletRequestAttributes.removeAttribute(name, RequestAttributes.SCOPE_SESSION);      }        /**       * 獲取所有session key       *       * @return String[]       */      public static String[] getSessionKeys() {          log.debug("getSessionKeys -- Thread id :{}, name : {}", Thread.currentThread().getId(), Thread.currentThread().getName());          ServletRequestAttributes servletRequestAttributes = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes());          if (null == servletRequestAttributes) {              return null;          }          return servletRequestAttributes.getAttributeNames(RequestAttributes.SCOPE_SESSION);      }  }