1919import com .stormpath .sdk .client .Client ;
2020import com .stormpath .sdk .impl .http .HttpHeadersHolder ;
2121import com .stormpath .sdk .lang .Assert ;
22- import com .stormpath .sdk .lang .Strings ;
2322import com .stormpath .sdk .servlet .filter .HttpFilter ;
2423import com .stormpath .sdk .servlet .filter .WrappedServletRequestFactory ;
25- import org .springframework .beans .factory .annotation .Autowired ;
26- import org .springframework .beans .factory .annotation .Qualifier ;
27- import org .springframework .beans .factory .annotation .Value ;
2824
2925import javax .servlet .FilterChain ;
30- import javax .servlet .ServletException ;
3126import javax .servlet .http .HttpServletRequest ;
3227import javax .servlet .http .HttpServletResponse ;
33- import java .util .Arrays ;
3428import java .util .Collections ;
3529import java .util .Enumeration ;
3630import java .util .LinkedHashMap ;
31+ import java .util .LinkedHashSet ;
3732import java .util .List ;
3833import java .util .Map ;
3934import java .util .Set ;
4035
36+ /**
37+ * This filter adds Client and Application as attributes to every request in order for subsequent Filters to have access to them.
38+ * For example, a filter trying to validate an access token will need to have access to the Application (see AuthorizationHeaderAccountResolver)
39+ *
40+ * @since 1.3.0
41+ */
4142public class StormpathWrapperFilter extends HttpFilter {
4243
43- // private Set<String> clientRequestAttributeNames;
44- // private Set<String> applicationRequestAttributeNames;
45- @ Autowired
46- @ Qualifier ("stormpathWrappedServletRequestFactory" )
47- private WrappedServletRequestFactory factory ;
48-
49- @ Autowired
5044 protected Client client ;
5145
52- @ Autowired
5346 protected Application application ;
5447
55- @ Value ("#{ @environment['stormpath.web.request.client.attributeNames'] ?: 'client' }" )
56- protected String clientRequestAttributeNames ;
48+ protected Set <String > clientRequestAttributeNameList ;
5749
58- @ Value ("#{ @environment['stormpath.web.request.application.attributeNames'] ?: 'application' }" )
59- protected String applicationRequestAttributeNames ;
50+ protected Set <String > applicationRequestAttributeNameList ;
6051
61- private List <String > clientRequestAttributeNamesList ;
62-
63- private List <String > applicationRequestAttributeNameList ;
52+ protected WrappedServletRequestFactory wrappedServletRequestFactory ;
6453
6554 public StormpathWrapperFilter () {
66- this .clientRequestAttributeNamesList = Strings .split (clientRequestAttributeNames ) != null ? Arrays .asList (Strings .split (clientRequestAttributeNames )) : Collections .<String >emptyList ();
67- this .applicationRequestAttributeNameList = Strings .split (applicationRequestAttributeNames ) != null ? Arrays .asList (Strings .split (applicationRequestAttributeNames )) : Collections .<String >emptyList ();
6855 }
6956
70- // public void setFilterChainResolver(FilterChainResolver filterChainResolver) {
71- // Assert.notNull(filterChainResolver, "FilterChainResolver cannot be null.");
72- // //this.filterChainResolver = filterChainResolver;
73- // }
74-
75- // public void setClientRequestAttributeNames(Set<String> clientRequestAttributeNames) {
76- // this.clientRequestAttributeNames =
77- // clientRequestAttributeNames != null ? clientRequestAttributeNames : new LinkedHashSet<>();
78- // }
79- //
80- // public void setApplicationRequestAttributeNames(Set<String> applicationRequestAttributeNames) {
81- // this.applicationRequestAttributeNames =
82- // applicationRequestAttributeNames != null ? applicationRequestAttributeNames : new LinkedHashSet<String>();
83- // }
84- //
85- // public void setWrappedServletRequestFactory(WrappedServletRequestFactory factory) {
86- // Assert.notNull(factory, "WrappedServletRequestFactory cannot be null.");
87- // this.factory = factory;
88- // }
57+ public void setClientRequestAttributeNames (Set <String > clientRequestAttributeNames ) {
58+ this .clientRequestAttributeNameList =
59+ clientRequestAttributeNames != null ? clientRequestAttributeNames : new LinkedHashSet <String >();
60+ }
61+
62+ public void setApplicationRequestAttributeNames (Set <String > applicationRequestAttributeNames ) {
63+ this .applicationRequestAttributeNameList =
64+ applicationRequestAttributeNames != null ? applicationRequestAttributeNames : new LinkedHashSet <String >();
65+ }
8966
9067 public void setClient (Client client ) {
9168 this .client = client ;
@@ -95,35 +72,15 @@ public void setApplication(Application application) {
9572 this .application = application ;
9673 }
9774
98- @ Override
99- protected void onInit () throws ServletException {
100- //Assert.notNull(filterChainResolver, "FilterChainResolver cannot be null.");
101- Assert .notNull (clientRequestAttributeNames , "clientRequestAttributeNames cannot be null." );
102- Assert .notNull (applicationRequestAttributeNames , "applicationRequestAttributeNames cannot be null." );
103- Assert .notNull (factory , "WrappedServletRequestFactory cannot be null." );
104- Assert .notNull (client , "Client instance cannot be null." );
105- Assert .notNull (application , "Application instance cannot be null." );
106- }
107-
108- // protected FilterChainResolver getFilterChainResolver() {
109- // return this.filterChainResolver;
110- // }
111-
11275 @ Override
11376 public void filter (HttpServletRequest request , HttpServletResponse response , final FilterChain chain )
11477 throws Exception {
11578
116- // FilterChainResolver resolver = getFilterChainResolver();
117- // Assert.notNull(resolver, "Filter has not yet been configured. Explicitly call setFilterChainResolver or " +
118- // "init(FilterConfig).");
119-
12079 setRequestAttributes (request );
12180
12281 //wrap:
12382 request = wrapRequest (request , response );
12483
125- //FilterChain target = resolver.getChain(request, response, chain);
126-
12784 //continue:
12885 chain .doFilter (request , response );
12986
@@ -148,13 +105,18 @@ protected void setRequestAttributes(HttpServletRequest request) {
148105 HttpHeadersHolder .set (headersMap );
149106 }
150107
108+ public void setWrappedServletRequestFactory (WrappedServletRequestFactory factory ) {
109+ Assert .notNull (factory , "WrappedServletRequestFactory cannot be null." );
110+ this .wrappedServletRequestFactory = factory ;
111+ }
112+
151113 protected void setClientRequestAttributes (HttpServletRequest request ) {
152114 String name = Client .class .getName ();
153115 //value must always be set:
154116 request .setAttribute (name , client );
155117
156118 //user customized values:
157- for (String aName : applicationRequestAttributeNameList ) {
119+ for (String aName : clientRequestAttributeNameList ) {
158120 request .setAttribute (aName , client );
159121 }
160122 }
@@ -171,7 +133,7 @@ protected void setApplicationRequestAttributes(HttpServletRequest request) {
171133 }
172134
173135 protected HttpServletRequest wrapRequest (HttpServletRequest request , HttpServletResponse response ) {
174- return this .factory .wrapHttpServletRequest (request , response );
136+ return this .wrappedServletRequestFactory .wrapHttpServletRequest (request , response );
175137 }
176138
177139}
0 commit comments