// // ======================================================================== // Copyright (c) 1995-2017 Mort Bay Consulting Pty. Ltd. // ------------------------------------------------------------------------ // All rights reserved. This program and the accompanying materials // are made available under the terms of the Eclipse Public License v1.0 // and Apache License v2.0 which accompanies this distribution. // // The Eclipse Public License is available at // http://www.eclipse.org/legal/epl-v10.html // // The Apache License v2.0 is available at // http://www.opensource.org/licenses/apache2.0.php // // You may elect to redistribute this code under either of these licenses. // ======================================================================== // package com.acme; import java.util.EnumSet; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.servlet.DispatcherType; import javax.servlet.FilterRegistration; import javax.servlet.HttpConstraintElement; import javax.servlet.ServletContextAttributeEvent; import javax.servlet.ServletContextAttributeListener; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.ServletRegistration; import javax.servlet.ServletRequestAttributeEvent; import javax.servlet.ServletRequestAttributeListener; import javax.servlet.ServletRequestEvent; import javax.servlet.ServletRequestListener; import javax.servlet.ServletSecurityElement; import javax.servlet.annotation.ServletSecurity; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionAttributeListener; import javax.servlet.http.HttpSessionBindingEvent; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class TestListener implements HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener, ServletContextListener, ServletContextAttributeListener, ServletRequestListener, ServletRequestAttributeListener { Map<String,Throwable> _called=new HashMap<>(); public TestListener() { _called.put("TestListener",new Throwable()); } @PostConstruct public void postConstruct() { _called.put("postConstruct",new Throwable()); } @PreDestroy public void preDestroy() { _called.put("preDestroy",new Throwable()); } @Override public void attributeAdded(HttpSessionBindingEvent se) { // System.err.println("attributedAdded "+se); _called.put("attributeAdded",new Throwable()); } @Override public void attributeRemoved(HttpSessionBindingEvent se) { // System.err.println("attributeRemoved "+se); _called.put("attributeRemoved",new Throwable()); } @Override public void attributeReplaced(HttpSessionBindingEvent se) { // System.err.println("attributeReplaced "+se); _called.put("attributeReplaced",new Throwable()); } @Override public void sessionWillPassivate(HttpSessionEvent se) { // System.err.println("sessionWillPassivate "+se); _called.put("sessionWillPassivate",new Throwable()); } @Override public void sessionDidActivate(HttpSessionEvent se) { // System.err.println("sessionDidActivate "+se); _called.put("sessionDidActivate",new Throwable()); } @Override public void contextInitialized(ServletContextEvent sce) { // System.err.println("contextInitialized "+sce); _called.put("contextInitialized",new Throwable()); //configure programmatic security ServletRegistration.Dynamic rego = sce.getServletContext().addServlet("RegoTest", RegTest.class.getName()); rego.addMapping("/rego/*"); HttpConstraintElement constraintElement = new HttpConstraintElement(ServletSecurity.EmptyRoleSemantic.PERMIT, ServletSecurity.TransportGuarantee.NONE, new String[]{"admin"}); ServletSecurityElement securityElement = new ServletSecurityElement(constraintElement, null); Set<String> unchanged = rego.setServletSecurity(securityElement); //// System.err.println("Security constraints registered: "+unchanged.isEmpty()); //Test that a security constraint from web.xml can't be overridden programmatically ServletRegistration.Dynamic rego2 = sce.getServletContext().addServlet("RegoTest2", RegTest.class.getName()); rego2.addMapping("/rego2/*"); securityElement = new ServletSecurityElement(constraintElement, null); unchanged = rego2.setServletSecurity(securityElement); //// System.err.println("Overridding web.xml constraints not possible:" +!unchanged.isEmpty()); /* For servlet 3.0 */ FilterRegistration registration = sce.getServletContext().addFilter("TestFilter",TestFilter.class.getName()); if (registration != null) //otherwise defined in web.xml { ((FilterRegistration.Dynamic)registration).setAsyncSupported(true); } else { registration=sce.getServletContext().getFilterRegistration("TestFilter"); } registration.setInitParameter("remote", "false"); registration.addMappingForUrlPatterns( EnumSet.of(DispatcherType.ERROR,DispatcherType.ASYNC,DispatcherType.FORWARD,DispatcherType.INCLUDE,DispatcherType.REQUEST), true, new String[]{"/*"}); } @Override public void contextDestroyed(ServletContextEvent sce) { _called.put("contextDestroyed",new Throwable()); // System.err.println("contextDestroyed "+sce); } @Override public void attributeAdded(ServletContextAttributeEvent scab) { _called.put("attributeAdded",new Throwable()); // System.err.println("attributeAdded "+scab); } @Override public void attributeRemoved(ServletContextAttributeEvent scab) { _called.put("attributeRemoved",new Throwable()); // System.err.println("attributeRemoved "+scab); } @Override public void attributeReplaced(ServletContextAttributeEvent scab) { _called.put("attributeReplaced",new Throwable()); // System.err.println("attributeReplaced "+scab); } @Override public void requestDestroyed(ServletRequestEvent sre) { _called.put("requestDestroyed",new Throwable()); ((HttpServletRequest)sre.getServletRequest()).getSession(false); sre.getServletRequest().setAttribute("requestInitialized",null); // System.err.println("requestDestroyed "+sre); } @Override public void requestInitialized(ServletRequestEvent sre) { _called.put("requestInitialized",new Throwable()); sre.getServletRequest().setAttribute("requestInitialized","'"+sre.getServletContext().getContextPath()+"'"); // System.err.println("requestInitialized "+sre); } @Override public void attributeAdded(ServletRequestAttributeEvent srae) { _called.put("attributeAdded",new Throwable()); // System.err.println("attributeAdded "+srae); } @Override public void attributeRemoved(ServletRequestAttributeEvent srae) { _called.put("attributeRemoved",new Throwable()); // System.err.println("attributeRemoved "+srae); } @Override public void attributeReplaced(ServletRequestAttributeEvent srae) { _called.put("attributeReplaced",new Throwable()); // System.err.println("attributeReplaced "+srae); } @Override public void sessionCreated(HttpSessionEvent se) { _called.put("sessionCreated",new Throwable()); // System.err.println("sessionCreated "+se); } @Override public void sessionDestroyed(HttpSessionEvent se) { _called.put("sessionDestroyed",new Throwable()); // System.err.println("sessionDestroyed "+se); } }