From d38efae5f09776e45dd0e0faaa8bf1cf2ab04dad Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Wed, 19 Sep 2018 09:20:42 +0200 Subject: [PATCH] WW-4963 Implements new SessionAware interface that uses withSession instead of setSession --- .../apache/struts2/action/SessionAware.java | 40 +++++++++++++++++++ .../interceptor/ServletConfigInterceptor.java | 4 ++ .../struts2/interceptor/SessionAware.java | 4 ++ .../ServletConfigInterceptorTest.java | 16 ++++++++ 4 files changed, 64 insertions(+) create mode 100644 core/src/main/java/org/apache/struts2/action/SessionAware.java diff --git a/core/src/main/java/org/apache/struts2/action/SessionAware.java b/core/src/main/java/org/apache/struts2/action/SessionAware.java new file mode 100644 index 000000000..039fcca00 --- /dev/null +++ b/core/src/main/java/org/apache/struts2/action/SessionAware.java @@ -0,0 +1,40 @@ +/* + * 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.action; + +import java.util.Map; + +/** + * Actions that want access to the user's HTTP session attributes should implement this interface. + * + * This will give them access to a Map where they can put objects that can be made available + * to subsequent requests. + * + * Typical uses may be cached user data such as name, or a shopping cart. + */ +public interface SessionAware { + + /** + * Applies the Map of session attributes in the implementing class. + * + * @param session a Map of HTTP session attribute name/value pairs. + */ + void withSession(Map session); + +} diff --git a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java index 813a87d91..bd017d07b 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/ServletConfigInterceptor.java @@ -149,6 +149,10 @@ public class ServletConfigInterceptor extends AbstractInterceptor implements Str ((SessionAware) action).setSession(context.getSession()); } + if (action instanceof org.apache.struts2.action.SessionAware) { + ((org.apache.struts2.action.SessionAware) action).withSession(context.getSession()); + } + if (action instanceof RequestAware) { ((RequestAware) action).setRequest((Map) context.get("request")); } diff --git a/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java b/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java index db553889e..0380c9702 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java +++ b/core/src/main/java/org/apache/struts2/interceptor/SessionAware.java @@ -31,13 +31,17 @@ import java.util.Map; *

* Typical uses may be cached user data such as name, or a shopping cart. *

+ * @deprecated use {@link org.apache.struts2.action.SessionAware} */ +@Deprecated public interface SessionAware { /** * Sets the Map of session attributes in the implementing class. * * @param session a Map of HTTP session attribute name/value pairs. + * @deprecated please use {@link org.apache.struts2.action.SessionAware#withSession(Map)} */ + @Deprecated public void setSession(Map session); } diff --git a/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java index c394d2b90..34353c87f 100644 --- a/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java +++ b/core/src/test/java/org/apache/struts2/interceptor/ServletConfigInterceptorTest.java @@ -128,6 +128,22 @@ public class ServletConfigInterceptorTest extends StrutsInternalTestCase { verify(mock); } + public void testActionSessionAware() throws Exception { + org.apache.struts2.action.SessionAware mock = createMock(org.apache.struts2.action.SessionAware.class); + + MockActionInvocation mai = createActionInvocation(mock); + + Map session = new HashMap(); + mai.getInvocationContext().setSession(session); + + mock.withSession(session); + expectLastCall().times(1); + + replay(mock); + interceptor.intercept(mai); + verify(mock); + } + public void testApplicationAware() throws Exception { ApplicationAware mock = (ApplicationAware) createMock(ApplicationAware.class);