View Javadoc

1   /* Copyright 2004, 2005, 2006 Acegi Technology Pty Limited
2    *
3    * Licensed under the Apache License, Version 2.0 (the "License");
4    * you may not use this file except in compliance with the License.
5    * You may obtain a copy of the License at
6    *
7    *     http://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  
16  package org.springframework.security.context;
17  
18  import org.springframework.util.Assert;
19  
20  
21  /**
22   * An <code>InheritableThreadLocal</code>-based implementation of {@link
23   * org.springframework.security.context.SecurityContextHolderStrategy}.
24   *
25   * @author Ben Alex
26   * @version $Id: InheritableThreadLocalSecurityContextHolderStrategy.java 2217 2007-10-27 00:45:30Z luke_t $
27   *
28   * @see java.lang.ThreadLocal
29   * @see org.springframework.security.context.HttpSessionContextIntegrationFilter
30   */
31  public class InheritableThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy {
32      //~ Static fields/initializers =====================================================================================
33  
34      private static ThreadLocal contextHolder = new InheritableThreadLocal();
35  
36      //~ Methods ========================================================================================================
37  
38      public void clearContext() {
39          contextHolder.set(null);
40      }
41  
42      public SecurityContext getContext() {
43          if (contextHolder.get() == null) {
44              contextHolder.set(new SecurityContextImpl());
45          }
46  
47          return (SecurityContext) contextHolder.get();
48      }
49  
50      public void setContext(SecurityContext context) {
51          Assert.notNull(context, "Only non-null SecurityContext instances are permitted");
52          contextHolder.set(context);
53      }
54  }