You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shiro.apache.org by lh...@apache.org on 2010/05/14 21:03:50 UTC
svn commit: r944400 - in /incubator/shiro/trunk:
core/src/main/java/org/apache/shiro/subject/support/
core/src/main/java/org/apache/shiro/util/
core/src/test/java/org/apache/shiro/mgt/
core/src/test/java/org/apache/shiro/realm/activedirectory/ core/src...
Author: lhazlewood
Date: Fri May 14 19:03:50 2010
New Revision: 944400
URL: http://svn.apache.org/viewvc?rev=944400&view=rev
Log:
SHIRO-159: Modified ThreadContext and ThreadState implementations to use remove() instead of clear() in all cases. Most of the changes are in Test cases setUp/tearDown - core code/web code was modified very little.
Modified:
incubator/shiro/trunk/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java
incubator/shiro/trunk/core/src/main/java/org/apache/shiro/util/ThreadContext.java
incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/AbstractSecurityManagerTest.java
incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/VMSingletonDefaultSecurityManagerTest.java
incubator/shiro/trunk/core/src/test/java/org/apache/shiro/realm/activedirectory/ActiveDirectoryRealmTest.java
incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java
incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DelegatingSessionTest.java
incubator/shiro/trunk/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java
incubator/shiro/trunk/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java
incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java
incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/subject/support/WebSubjectThreadState.java
incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/AbstractWebSecurityManagerTest.java
incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/session/DefaultWebSessionManagerTest.java
Modified: incubator/shiro/trunk/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java (original)
+++ incubator/shiro/trunk/core/src/main/java/org/apache/shiro/subject/support/SubjectThreadState.java Fri May 14 19:03:50 2010
@@ -20,16 +20,18 @@ package org.apache.shiro.subject.support
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
+import org.apache.shiro.util.CollectionUtils;
import org.apache.shiro.util.ThreadContext;
import org.apache.shiro.util.ThreadState;
+import java.util.Map;
+
/**
* @since 1.0
*/
public class SubjectThreadState implements ThreadState {
- private Subject originalSubject;
- private transient SecurityManager originalSecurityManager;
+ private Map<Object,Object> originalResources;
private final Subject subject;
private final transient SecurityManager securityManager;
@@ -38,16 +40,15 @@ public class SubjectThreadState implemen
if (subject == null) {
throw new IllegalArgumentException("Subject argument cannot be null.");
}
- this.originalSubject = ThreadContext.getSubject();
this.subject = subject;
- this.originalSecurityManager = ThreadContext.getSecurityManager();
+ SecurityManager originalSecurityManager = ThreadContext.getSecurityManager();
//TODO - not an interface call (yuck)
if (this.subject instanceof DelegatingSubject) {
this.securityManager = ((DelegatingSubject) this.subject).getSecurityManager();
} else {
- this.securityManager = this.originalSecurityManager;
+ this.securityManager = originalSecurityManager;
}
}
@@ -56,31 +57,23 @@ public class SubjectThreadState implemen
}
public void bind() {
- this.originalSubject = ThreadContext.getSubject();
- this.originalSecurityManager = ThreadContext.getSecurityManager();
+ this.originalResources = ThreadContext.getResources();
+ ThreadContext.remove();
ThreadContext.bind(subject);
- if (securityManager == null) {
- ThreadContext.unbindSecurityManager();
- } else {
+ if ( securityManager != null ) {
ThreadContext.bind(securityManager);
}
}
public void restore() {
- if (originalSubject == null) {
- ThreadContext.unbindSubject();
- } else {
- ThreadContext.bind(originalSubject);
- }
- if (originalSecurityManager == null) {
- ThreadContext.unbindSecurityManager();
- } else {
- ThreadContext.bind(originalSecurityManager);
+ ThreadContext.remove();
+ if ( !CollectionUtils.isEmpty(this.originalResources) ) {
+ ThreadContext.setResources(this.originalResources);
}
}
public void clear() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
}
Modified: incubator/shiro/trunk/core/src/main/java/org/apache/shiro/util/ThreadContext.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/main/java/org/apache/shiro/util/ThreadContext.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/main/java/org/apache/shiro/util/ThreadContext.java (original)
+++ incubator/shiro/trunk/core/src/main/java/org/apache/shiro/util/ThreadContext.java Fri May 14 19:03:50 2010
@@ -41,7 +41,7 @@ import java.util.Map;
* execution, respectively (i.e. individually explicitly or all via the <tt>clear</tt> method).</p>
*
* @author Les Hazlewood
- * @see #clear()
+ * @see #remove()
* @since 0.1
*/
@SuppressWarnings(value = {"unchecked", "unsafe"})
@@ -66,27 +66,7 @@ public abstract class ThreadContext {
@Deprecated
public static final String HOST_KEY = ThreadContext.class.getName() + "_INET_ADDRESS_KEY";
- protected static ThreadLocal<Map<Object, Object>> resources =
- new InheritableThreadLocal<Map<Object, Object>>() {
- protected Map<Object, Object> initialValue() {
- return new HashMap<Object, Object>();
- }
-
- /**
- * This implementation was added to address a
- * <a href="http://jsecurity.markmail.org/search/?q=#query:+page:1+mid:xqi2yxurwmrpqrvj+state:results">
- * user-reported issue</a>.
- * @param parentValue the parent value, a HashMap as defined in the {@link #initialValue()} method.
- * @return the HashMap to be used by any parent-spawned child threads (a clone of the parent HashMap).
- */
- protected Map<Object, Object> childValue(Map<Object, Object> parentValue) {
- if (parentValue != null) {
- return (Map<Object, Object>) ((HashMap<Object, Object>) parentValue).clone();
- } else {
- return null;
- }
- }
- };
+ protected static ThreadLocal<Map<Object, Object>> resources;
/**
* Default no-argument constructor.
@@ -95,13 +75,81 @@ public abstract class ThreadContext {
}
/**
+ * Returns the {@link ThreadLocal} resource {@code Map}. If it does not yet exist, one is created,
+ * bound to the thread, and then returned.
+ *
+ * @return the ThreadLocal resource {@code Map}, possibly lazily-created.
+ * @since 1.0
+ */
+ protected static Map<Object, Object> getResourcesLazy() {
+ if (resources == null) {
+ resources = createThreadLocal();
+ }
+ return resources.get();
+ }
+
+ /**
+ * Creates a new {@link ThreadLocal} instance containing a {@link Map} to hold arbitrary key-value pairs.
+ *
+ * @return a new {@link ThreadLocal} instance containing a {@link Map} to hold arbitrary key-value pairs.
+ * @since 1.0
+ */
+ private static ThreadLocal<Map<Object, Object>> createThreadLocal() {
+ return new InheritableThreadLocal<Map<Object, Object>>() {
+ protected Map<Object, Object> initialValue() {
+ return new HashMap<Object, Object>();
+ }
+
+ /**
+ * This implementation was added to address a
+ * <a href="http://jsecurity.markmail.org/search/?q=#query:+page:1+mid:xqi2yxurwmrpqrvj+state:results">
+ * user-reported issue</a>.
+ * @param parentValue the parent value, a HashMap as defined in the {@link #initialValue()} method.
+ * @return the HashMap to be used by any parent-spawned child threads (a clone of the parent HashMap).
+ */
+ protected Map<Object, Object> childValue(Map<Object, Object> parentValue) {
+ if (parentValue != null) {
+ return (Map<Object, Object>) ((HashMap<Object, Object>) parentValue).clone();
+ } else {
+ return null;
+ }
+ }
+ };
+ }
+
+ /**
* Returns the ThreadLocal Map. This Map is used internally to bind objects
* to the current thread by storing each object under a unique key.
*
* @return the map of bound resources
*/
- protected static Map<Object, Object> getResources() {
- return resources.get();
+ public static Map<Object, Object> getResources() {
+ return resources != null ? new HashMap<Object,Object>(resources.get()) : null;
+ }
+
+ public static void setResources(Map<Object,Object> resources) {
+ if (CollectionUtils.isEmpty(resources) ) {
+ return;
+ }
+ Map<Object,Object> existing = getResourcesLazy();
+ existing.clear();
+ existing.putAll(resources);
+ }
+
+ /**
+ * Returns the value bound in the {@code ThreadContext} under the specified {@code key}, or {@code null} if there
+ * is no value for that {@code key}.
+ *
+ * @param key the map key to use to lookup the value
+ * @return the value bound in the {@code ThreadContext} under the specified {@code key}, or {@code null} if there
+ * is no value for that {@code key}.
+ * @since 1.0
+ */
+ private static Object getValue(Object key) {
+ if (resources == null) {
+ return null;
+ }
+ return resources.get().get(key);
}
/**
@@ -117,7 +165,8 @@ public abstract class ThreadContext {
String msg = "get() - in thread [" + Thread.currentThread().getName() + "]";
log.trace(msg);
}
- Object value = getResources().get(key);
+
+ Object value = getValue(key);
if ((value != null) && log.isTraceEnabled()) {
String msg = "Retrieved value of type [" + value.getClass().getName() + "] for key [" +
key + "] " + "bound to thread [" + Thread.currentThread().getName() + "]";
@@ -151,7 +200,7 @@ public abstract class ThreadContext {
return;
}
- getResources().put(key, value);
+ getResourcesLazy().put(key, value);
if (log.isTraceEnabled()) {
String msg = "Bound value of type [" + value.getClass().getName() + "] for key [" +
@@ -169,7 +218,10 @@ public abstract class ThreadContext {
* under the specified <tt>key</tt> name.
*/
public static Object remove(Object key) {
- Object value = getResources().remove(key);
+ if (resources == null) {
+ return null;
+ }
+ Object value = resources.get().remove(key);
if ((value != null) && log.isTraceEnabled()) {
String msg = "Removed value of type [" + value.getClass().getName() + "] for key [" +
@@ -188,25 +240,44 @@ public abstract class ThreadContext {
* otherwise.
*/
public static boolean containsKey(Object key) {
- return getResources().containsKey(key);
+ return resources != null && resources.get().containsKey(key);
}
/**
- * Removes <em>all</em> values bound to this ThreadContext, which includes any Subject, Session, or InetAddress
- * that may be bound by these respective objects' conveninece methods, as well as all values bound by your
+ * Clears <em>all</em> values bound to this ThreadContext, which includes any Subject, Session, or InetAddress
+ * that may be bound by these respective objects' convenience methods, as well as all values bound by your
* application code.
* <p/>
* <p>This operation is meant as a clean-up operation that may be called at the end of
* thread execution to prevent data corruption in a pooled thread environment.
*/
public static void clear() {
- getResources().clear();
+ if (resources != null) {
+ resources.get().clear();
+ }
if (log.isTraceEnabled()) {
log.trace("Removed all ThreadContext values from thread [" + Thread.currentThread().getName() + "]");
}
}
/**
+ * First {@link #clear clears} the {@code ThreadContext} values and then
+ * {@link ThreadLocal#remove removes} the underlying {@link ThreadLocal ThreadLocal} from the thread.
+ * <p/>
+ * This method is meant to be the final 'clean up' operation that is called at the end of thread execution to
+ * prevent thread corruption in pooled thread environments.
+ *
+ * @since 1.0
+ */
+ public static void remove() {
+ if (resources != null) {
+ clear();
+ resources.remove();
+ resources = null;
+ }
+ }
+
+ /**
* Convenience method that simplifies retrieval of the application's SecurityManager instance from the current
* thread. If there is no SecurityManager bound to the thread (probably because framework code did not bind it
* to the thread), this method returns <tt>null</tt>.
Modified: incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/AbstractSecurityManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/AbstractSecurityManagerTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/AbstractSecurityManagerTest.java (original)
+++ incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/AbstractSecurityManagerTest.java Fri May 14 19:03:50 2010
@@ -33,7 +33,7 @@ public abstract class AbstractSecurityMa
@After
public void tearDown() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
protected Subject newSubject(SecurityManager securityManager) {
Modified: incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/VMSingletonDefaultSecurityManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/VMSingletonDefaultSecurityManagerTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/VMSingletonDefaultSecurityManagerTest.java (original)
+++ incubator/shiro/trunk/core/src/test/java/org/apache/shiro/mgt/VMSingletonDefaultSecurityManagerTest.java Fri May 14 19:03:50 2010
@@ -18,17 +18,17 @@
*/
package org.apache.shiro.mgt;
-import org.junit.After;
-import static org.junit.Assert.assertTrue;
-import org.junit.Before;
-import org.junit.Test;
-
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.realm.text.PropertiesRealm;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ThreadContext;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
/**
@@ -39,12 +39,12 @@ public class VMSingletonDefaultSecurityM
@Before
public void setUp() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
@After
public void tearDown() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
@Test
Modified: incubator/shiro/trunk/core/src/test/java/org/apache/shiro/realm/activedirectory/ActiveDirectoryRealmTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/test/java/org/apache/shiro/realm/activedirectory/ActiveDirectoryRealmTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/test/java/org/apache/shiro/realm/activedirectory/ActiveDirectoryRealmTest.java (original)
+++ incubator/shiro/trunk/core/src/test/java/org/apache/shiro/realm/activedirectory/ActiveDirectoryRealmTest.java Fri May 14 19:03:50 2010
@@ -33,7 +33,6 @@ import org.apache.shiro.subject.SimplePr
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ThreadContext;
import org.junit.After;
-import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Test;
@@ -41,6 +40,8 @@ import javax.naming.NamingException;
import java.util.HashSet;
import java.util.Set;
+import static org.junit.Assert.assertTrue;
+
/**
* Simple test case for ActiveDirectoryRealm.
@@ -64,7 +65,7 @@ public class ActiveDirectoryRealmTest {
@Before
public void setup() {
- ThreadContext.clear();
+ ThreadContext.remove();
realm = new TestActiveDirectoryRealm();
securityManager = new DefaultSecurityManager(realm);
SecurityUtils.setSecurityManager(securityManager);
@@ -74,7 +75,7 @@ public class ActiveDirectoryRealmTest {
public void tearDown() {
SecurityUtils.setSecurityManager(null);
securityManager.destroy();
- ThreadContext.clear();
+ ThreadContext.remove();
}
@Test
Modified: incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java (original)
+++ incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DefaultSessionManagerTest.java Fri May 14 19:03:50 2010
@@ -43,14 +43,14 @@ public class DefaultSessionManagerTest {
@Before
public void setup() {
- ThreadContext.clear();
+ ThreadContext.remove();
sm = new DefaultSessionManager();
}
@After
public void tearDown() {
sm.destroy();
- ThreadContext.clear();
+ ThreadContext.remove();
}
public void sleep(long millis) {
Modified: incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DelegatingSessionTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DelegatingSessionTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DelegatingSessionTest.java (original)
+++ incubator/shiro/trunk/core/src/test/java/org/apache/shiro/session/mgt/DelegatingSessionTest.java Fri May 14 19:03:50 2010
@@ -21,13 +21,14 @@ package org.apache.shiro.session.mgt;
import org.apache.shiro.session.ExpiredSessionException;
import org.apache.shiro.util.ThreadContext;
import org.junit.After;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
import org.junit.Before;
import org.junit.Test;
import java.io.Serializable;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
/**
* Unit test for the {@link DelegatingSession} class.
*/
@@ -38,7 +39,7 @@ public class DelegatingSessionTest {
@Before
public void setup() {
- ThreadContext.clear();
+ ThreadContext.remove();
sm = new DefaultSessionManager();
Serializable sessionId = sm.start((String) null);
this.session = new DelegatingSession(sm, sessionId);
@@ -47,7 +48,7 @@ public class DelegatingSessionTest {
@After
public void tearDown() {
sm.destroy();
- ThreadContext.clear();
+ ThreadContext.remove();
}
public void sleep(long millis) {
Modified: incubator/shiro/trunk/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java (original)
+++ incubator/shiro/trunk/core/src/test/java/org/apache/shiro/subject/DelegatingSubjectTest.java Fri May 14 19:03:50 2010
@@ -48,12 +48,12 @@ public class DelegatingSubjectTest {
@Before
public void setup() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
@After
public void tearDown() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
@Test
Modified: incubator/shiro/trunk/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java (original)
+++ incubator/shiro/trunk/support/spring/src/test/java/org/apache/shiro/spring/remoting/SecureRemoteInvocationFactoryTest.java Fri May 14 19:03:50 2010
@@ -43,7 +43,7 @@ public class SecureRemoteInvocationFacto
@Before
public void setup() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
protected void bind(Subject subject) {
@@ -52,7 +52,7 @@ public class SecureRemoteInvocationFacto
@After
public void tearDown() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
protected Method getMethod(String name, Class clazz) {
Modified: incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java (original)
+++ incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/servlet/AbstractShiroFilter.java Fri May 14 19:03:50 2010
@@ -234,8 +234,6 @@ public abstract class AbstractShiroFilte
if ( threadState != null ) {
threadState.clear();
}
- //just for good measure (SHIRO-159):
- ThreadContext.clear();
}
/**
Modified: incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/subject/support/WebSubjectThreadState.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/subject/support/WebSubjectThreadState.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/subject/support/WebSubjectThreadState.java (original)
+++ incubator/shiro/trunk/web/src/main/java/org/apache/shiro/web/subject/support/WebSubjectThreadState.java Fri May 14 19:03:50 2010
@@ -30,9 +30,6 @@ import javax.servlet.ServletResponse;
*/
public class WebSubjectThreadState extends SubjectThreadState {
- private ServletRequest originalRequest;
- private ServletResponse originalResponse;
-
private final ServletRequest request;
private final ServletResponse response;
@@ -55,33 +52,11 @@ public class WebSubjectThreadState exten
@Override
public void bind() {
super.bind();
- this.originalRequest = WebUtils.getServletRequest();
- this.originalResponse = WebUtils.getServletResponse();
-
- if (request == null) {
- WebUtils.unbindServletRequest();
- } else {
+ if (request != null) {
WebUtils.bind(request);
}
- if (response == null) {
- WebUtils.unbindServletResponse();
- } else {
+ if (response != null) {
WebUtils.bind(response);
}
}
-
- @Override
- public void restore() {
- if (originalRequest == null) {
- WebUtils.unbindServletRequest();
- } else {
- WebUtils.bind(originalRequest);
- }
- if (originalResponse == null) {
- WebUtils.unbindServletResponse();
- } else {
- WebUtils.bind(originalResponse);
- }
- super.restore();
- }
}
Modified: incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/AbstractWebSecurityManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/AbstractWebSecurityManagerTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/AbstractWebSecurityManagerTest.java (original)
+++ incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/AbstractWebSecurityManagerTest.java Fri May 14 19:03:50 2010
@@ -35,7 +35,7 @@ public abstract class AbstractWebSecurit
@After
public void tearDown() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
protected Subject newSubject(SecurityManager sm, ServletRequest request, ServletResponse response) {
Modified: incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/session/DefaultWebSessionManagerTest.java
URL: http://svn.apache.org/viewvc/incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/session/DefaultWebSessionManagerTest.java?rev=944400&r1=944399&r2=944400&view=diff
==============================================================================
--- incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/session/DefaultWebSessionManagerTest.java (original)
+++ incubator/shiro/trunk/web/src/test/java/org/apache/shiro/web/session/DefaultWebSessionManagerTest.java Fri May 14 19:03:50 2010
@@ -45,7 +45,7 @@ public class DefaultWebSessionManagerTes
@After
public void clearThread() {
- ThreadContext.clear();
+ ThreadContext.remove();
}
@Test