很多人在找,在一个普通类里如何才能取系统的request或session,我也找了下,但没有,就自己实现了一下,期待需要的有缘人,希望能帮到一点点。
具体如下:
实现步骤:
1.定义一个线程类,普通的:
类里最主要的就是定义了一个参数:
private static ThreadLocal<HttpServletRequest> httpRequest = new ThreadLocal<HttpServletRequest>();
另外给了set get remove和线程相关的三个方法;
具体如下:
- public class SystemRequestContext {
-
- private static ThreadLocal<HttpServletRequest> httpRequest = new ThreadLocal<HttpServletRequest>();
- private static ThreadLocal<HttpSession> session = new ThreadLocal<HttpSession>();
-
- public static void removeHttpSession()
- {
- session.remove();
- }
-
- public static HttpSession getSession() {
- return session.get();
- }
-
- public static void setSession(HttpSession _session) {
- session.set(_session);
- }
2.定义一个filter,拦截所有的请求,把request装入
代码如下:
- public void doFilter(ServletRequest req, ServletResponse response,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest)req;
- SystemRequestContext.setHttpRequest(request);
- SystemRequestContext.setSession(request.getSession());
- try{
- chain.doFilter(request, response);
- }finally{
- SystemRequestContext.removeHttpRequest();
- SystemRequestContext.removeHttpSession();
- }
- }
3.如何使用:
- public class UserModuleValidateTag {
-
- public static boolean validateModule(String module)
- {
- HttpServletRequest request = SystemRequestContext.getHttpRequest();
- if(null!=request)
- System.out.println("^_^"+request);
|