001
014
015 package com.liferay.portal.servlet;
016
017 import com.liferay.portal.kernel.util.AutoResetThreadLocal;
018
019 import java.io.Closeable;
020
021 import java.util.Enumeration;
022
023 import javax.servlet.ServletRequest;
024 import javax.servlet.ServletRequestWrapper;
025 import javax.servlet.http.HttpServletRequest;
026 import javax.servlet.http.HttpServletRequestWrapper;
027
028
031 public class ThreadLocalFacadeHttpServletRequestWrapper
032 extends HttpServletRequestWrapper implements Closeable {
033
034 public ThreadLocalFacadeHttpServletRequestWrapper(
035 ServletRequestWrapper servletRequestWrapper,
036 HttpServletRequest httpServletRequest) {
037
038 super(httpServletRequest);
039
040 _servletRequestWrapper = servletRequestWrapper;
041
042 _nextHttpServletRequestThreadLocal.set(httpServletRequest);
043 }
044
045 public void close() {
046 if (_servletRequestWrapper != null) {
047 HttpServletRequest nextHttpServletRequest =
048 _nextHttpServletRequestThreadLocal.get();
049
050 _servletRequestWrapper.setRequest(nextHttpServletRequest);
051 }
052 }
053
054 @Override
055 public Object getAttribute(String name) {
056 ServletRequest servletRequest = getRequest();
057
058 return servletRequest.getAttribute(name);
059 }
060
061 @Override
062 public Enumeration<String> getAttributeNames() {
063 ServletRequest servletRequest = getRequest();
064
065 return servletRequest.getAttributeNames();
066 }
067
068 @Override
069 public ServletRequest getRequest() {
070 return _nextHttpServletRequestThreadLocal.get();
071 }
072
073 @Override
074 public void removeAttribute(String name) {
075 ServletRequest servletRequest = getRequest();
076
077 servletRequest.removeAttribute(name);
078 }
079
080 @Override
081 public void setAttribute(String name, Object o) {
082 ServletRequest servletRequest = getRequest();
083
084 servletRequest.setAttribute(name, o);
085 }
086
087 @Override
088 public void setRequest(ServletRequest request) {
089 _nextHttpServletRequestThreadLocal.set((HttpServletRequest)request);
090 }
091
092 private static ThreadLocal<HttpServletRequest>
093 _nextHttpServletRequestThreadLocal =
094 new AutoResetThreadLocal<HttpServletRequest>(
095 ThreadLocalFacadeHttpServletRequestWrapper.class +
096 "._nextHttpServletRequestThreadLocal") {
097
098 @Override
099 protected HttpServletRequest copy(
100 HttpServletRequest httpServletRequest) {
101
102 return httpServletRequest;
103 }
104
105 };
106
107 private ServletRequestWrapper _servletRequestWrapper;
108
109 }