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