diff --git a/core/src/main/java/org/apache/struts2/interceptor/ClearSessionInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ClearSessionInterceptor.java new file mode 100644 index 000000000..eaa40f73f --- /dev/null +++ b/core/src/main/java/org/apache/struts2/interceptor/ClearSessionInterceptor.java @@ -0,0 +1,93 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.struts2.interceptor; + +import java.util.Map; + +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.ActionInvocation; +import com.opensymphony.xwork2.interceptor.AbstractInterceptor; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; + +/** + * + * + * This interceptor clears the HttpSession. + *
+ * + * + * + * Interceptor parameters: + * + * + * + * + *+ * + * + * <action name="exampleAction" class="com.examples.ExampleAction"> + * <interceptor-ref name="clear-session"/> + * <interceptor-ref name="defaultStack"/> + * <result name="success">example.jsp</result> + * </action> + * + * + *+ */ +public class ClearSessionInterceptor extends AbstractInterceptor { + + private static final long serialVersionUID = -2102199238428329238L; + + private static final Logger LOG = LoggerFactory.getLogger(ClearSessionInterceptor.class); + + /* (non-Javadoc) + * @see com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation) + */ + public String intercept(ActionInvocation invocation) throws Exception { + LOG.debug("Clearing HttpSession"); + ActionContext ac = invocation.getInvocationContext(); + Map session = ac.getSession(); + + if (null != session) { + session.clear(); + } + return invocation.invoke(); + } +} diff --git a/core/src/test/java/org/apache/struts2/interceptor/ClearSessionInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/ClearSessionInterceptorTest.java new file mode 100644 index 000000000..a3673fb1c --- /dev/null +++ b/core/src/test/java/org/apache/struts2/interceptor/ClearSessionInterceptorTest.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.struts2.interceptor; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.struts2.StrutsTestCase; +import org.jmock.Mock; + +import com.opensymphony.xwork2.ActionContext; +import com.opensymphony.xwork2.mock.MockActionInvocation; + +/** + * Test case for ClearSessionInterceptor. + */ +public class ClearSessionInterceptorTest extends StrutsTestCase { + + public void testCreateSession() throws Exception { + Mock httpServletRequestMock = new Mock(HttpServletRequest.class); + + ClearSessionInterceptor interceptor = new ClearSessionInterceptor(); + MockActionInvocation invocation = new MockActionInvocation(); + ActionContext context = new ActionContext(new HashMap()); + Map session = new HashMap(); + session.put("Test1", "Test1"); + session.put("Test2", "Test2"); + session.put("Test3", "Test3"); + context.setSession(session); + invocation.setInvocationContext(context); + interceptor.intercept(invocation); + + assertEquals(0, session.size()); + } +}