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