View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  package com.acme;
20  
21  import java.util.EnumSet;
22  import java.util.HashMap;
23  import java.util.Map;
24  import java.util.Set;
25  
26  import javax.annotation.PostConstruct;
27  import javax.annotation.PreDestroy;
28  import javax.servlet.DispatcherType;
29  import javax.servlet.FilterRegistration;
30  import javax.servlet.HttpConstraintElement;
31  import javax.servlet.ServletContextAttributeEvent;
32  import javax.servlet.ServletContextAttributeListener;
33  import javax.servlet.ServletContextEvent;
34  import javax.servlet.ServletContextListener;
35  import javax.servlet.ServletRegistration;
36  import javax.servlet.ServletRequestAttributeEvent;
37  import javax.servlet.ServletRequestAttributeListener;
38  import javax.servlet.ServletRequestEvent;
39  import javax.servlet.ServletRequestListener;
40  import javax.servlet.ServletSecurityElement;
41  import javax.servlet.annotation.ServletSecurity;
42  import javax.servlet.http.HttpServletRequest;
43  import javax.servlet.http.HttpSessionActivationListener;
44  import javax.servlet.http.HttpSessionAttributeListener;
45  import javax.servlet.http.HttpSessionBindingEvent;
46  import javax.servlet.http.HttpSessionEvent;
47  import javax.servlet.http.HttpSessionListener;
48  
49  public class TestListener implements HttpSessionListener,  HttpSessionAttributeListener, HttpSessionActivationListener, ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener
50  {
51      Map<String,Throwable> _called=new HashMap<>();
52      
53      public TestListener()
54      {
55          _called.put("TestListener",new Throwable());
56      }
57  
58      @PostConstruct
59      public void postConstruct()
60      {
61          _called.put("postConstruct",new Throwable());
62      }
63      
64      @PreDestroy
65      public void preDestroy()
66      {
67          _called.put("preDestroy",new Throwable());
68      }
69      
70      @Override
71      public void attributeAdded(HttpSessionBindingEvent se)
72      {
73          // System.err.println("attributedAdded "+se);
74  
75          _called.put("attributeAdded",new Throwable());
76      }
77  
78      @Override
79      public void attributeRemoved(HttpSessionBindingEvent se)
80      {
81          // System.err.println("attributeRemoved "+se);
82          _called.put("attributeRemoved",new Throwable());
83      }
84  
85      @Override
86      public void attributeReplaced(HttpSessionBindingEvent se)
87      {
88          // System.err.println("attributeReplaced "+se);
89          _called.put("attributeReplaced",new Throwable());
90      }
91  
92      @Override
93      public void sessionWillPassivate(HttpSessionEvent se)
94      {
95          // System.err.println("sessionWillPassivate "+se);
96          _called.put("sessionWillPassivate",new Throwable());
97      }
98  
99      @Override
100     public void sessionDidActivate(HttpSessionEvent se)
101     {
102         // System.err.println("sessionDidActivate "+se);
103         _called.put("sessionDidActivate",new Throwable());
104     }
105 
106     @Override
107     public void contextInitialized(ServletContextEvent sce)
108     {	
109         // System.err.println("contextInitialized "+sce);
110         _called.put("contextInitialized",new Throwable());
111 
112         //configure programmatic security
113         ServletRegistration.Dynamic rego = sce.getServletContext().addServlet("RegoTest", RegTest.class.getName());
114         rego.addMapping("/rego/*");
115         HttpConstraintElement constraintElement = new HttpConstraintElement(ServletSecurity.EmptyRoleSemantic.PERMIT, 
116             ServletSecurity.TransportGuarantee.NONE, new String[]{"admin"});
117         ServletSecurityElement securityElement = new ServletSecurityElement(constraintElement, null);
118         Set<String> unchanged = rego.setServletSecurity(securityElement);
119         //// System.err.println("Security constraints registered: "+unchanged.isEmpty());
120 
121         //Test that a security constraint from web.xml can't be overridden programmatically
122         ServletRegistration.Dynamic rego2 = sce.getServletContext().addServlet("RegoTest2", RegTest.class.getName());
123         rego2.addMapping("/rego2/*");
124         securityElement = new ServletSecurityElement(constraintElement, null);
125         unchanged = rego2.setServletSecurity(securityElement);
126         //// System.err.println("Overridding web.xml constraints not possible:" +!unchanged.isEmpty());
127 
128         /* For servlet 3.0 */
129         FilterRegistration registration = sce.getServletContext().addFilter("TestFilter",TestFilter.class.getName());
130         if (registration != null) //otherwise defined in web.xml
131         {
132             ((FilterRegistration.Dynamic)registration).setAsyncSupported(true);
133         }
134         else
135         {
136             registration=sce.getServletContext().getFilterRegistration("TestFilter");
137         }
138         registration.setInitParameter("remote", "false");
139         registration.addMappingForUrlPatterns(
140                 EnumSet.of(DispatcherType.ERROR,DispatcherType.ASYNC,DispatcherType.FORWARD,DispatcherType.INCLUDE,DispatcherType.REQUEST),
141                 true, 
142                 new String[]{"/*"});
143     }
144 
145     @Override
146     public void contextDestroyed(ServletContextEvent sce)
147     {
148         _called.put("contextDestroyed",new Throwable());
149         // System.err.println("contextDestroyed "+sce);
150     }
151 
152     @Override
153     public void attributeAdded(ServletContextAttributeEvent scab)
154     {
155         _called.put("attributeAdded",new Throwable());
156         // System.err.println("attributeAdded "+scab);
157     }
158 
159     @Override
160     public void attributeRemoved(ServletContextAttributeEvent scab)
161     {
162         _called.put("attributeRemoved",new Throwable());
163         // System.err.println("attributeRemoved "+scab);
164     }
165 
166     @Override
167     public void attributeReplaced(ServletContextAttributeEvent scab)
168     {
169         _called.put("attributeReplaced",new Throwable());
170         // System.err.println("attributeReplaced "+scab);
171     }
172 
173     @Override
174     public void requestDestroyed(ServletRequestEvent sre)
175     {
176         _called.put("requestDestroyed",new Throwable());
177         ((HttpServletRequest)sre.getServletRequest()).getSession(false);
178         sre.getServletRequest().setAttribute("requestInitialized",null);
179         // System.err.println("requestDestroyed "+sre);
180     }
181 
182     @Override
183     public void requestInitialized(ServletRequestEvent sre)
184     {
185         _called.put("requestInitialized",new Throwable());
186         sre.getServletRequest().setAttribute("requestInitialized","'"+sre.getServletContext().getContextPath()+"'");
187         // System.err.println("requestInitialized "+sre);
188     }
189 
190     @Override
191     public void attributeAdded(ServletRequestAttributeEvent srae)
192     {
193         _called.put("attributeAdded",new Throwable());
194         // System.err.println("attributeAdded "+srae);
195     }
196 
197     @Override
198     public void attributeRemoved(ServletRequestAttributeEvent srae)
199     {
200         _called.put("attributeRemoved",new Throwable());
201         // System.err.println("attributeRemoved "+srae);
202     }
203 
204     @Override
205     public void attributeReplaced(ServletRequestAttributeEvent srae)
206     {
207         _called.put("attributeReplaced",new Throwable());
208         // System.err.println("attributeReplaced "+srae);
209     }
210 
211     @Override
212     public void sessionCreated(HttpSessionEvent se)
213     {
214         _called.put("sessionCreated",new Throwable());
215         // System.err.println("sessionCreated "+se);
216     }
217 
218     @Override
219     public void sessionDestroyed(HttpSessionEvent se)
220     {
221         _called.put("sessionDestroyed",new Throwable());
222         // System.err.println("sessionDestroyed "+se);
223     }
224 
225 
226 }