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
026
029 public class ThreadLocalFacadeServletRequestWrapper
030 extends ServletRequestWrapper implements Closeable {
031
032 public ThreadLocalFacadeServletRequestWrapper(
033 ServletRequestWrapper servletRequestWrapper,
034 ServletRequest nextServletRequest) {
035
036 super(nextServletRequest);
037
038 _servletRequestWrapper = servletRequestWrapper;
039
040 _nextServletRequestThreadLocal.set(nextServletRequest);
041 }
042
043 public void close() {
044 if (_servletRequestWrapper != null) {
045 ServletRequest nextServletRequest =
046 _nextServletRequestThreadLocal.get();
047
048 _servletRequestWrapper.setRequest(nextServletRequest);
049 }
050 }
051
052 @Override
053 public Object getAttribute(String name) {
054 ServletRequest servletRequest = getRequest();
055
056 return servletRequest.getAttribute(name);
057 }
058
059 @Override
060 public Enumeration<String> getAttributeNames() {
061 ServletRequest servletRequest = getRequest();
062
063 return servletRequest.getAttributeNames();
064 }
065
066 @Override
067 public ServletRequest getRequest() {
068 return _nextServletRequestThreadLocal.get();
069 }
070
071 @Override
072 public void removeAttribute(String name) {
073 ServletRequest servletRequest = getRequest();
074
075 servletRequest.removeAttribute(name);
076 }
077
078 @Override
079 public void setAttribute(String name, Object o) {
080 ServletRequest servletRequest = getRequest();
081
082 servletRequest.setAttribute(name, o);
083 }
084
085 @Override
086 public void setRequest(ServletRequest servletRequest) {
087 _nextServletRequestThreadLocal.set(servletRequest);
088 }
089
090 private static ThreadLocal<ServletRequest> _nextServletRequestThreadLocal =
091 new AutoResetThreadLocal<ServletRequest>(
092 ThreadLocalFacadeServletRequestWrapper.class +
093 "._nextServletRequestThreadLocal") {
094
095 @Override
096 protected ServletRequest copy(ServletRequest servletRequest) {
097 return servletRequest;
098 }
099
100 };
101
102 private ServletRequestWrapper _servletRequestWrapper;
103
104 }