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);      }  }