Author: ningjiang
Date: Wed Apr 14 09:34:30 2010
New Revision: 933892

URL: http://svn.apache.org/viewvc?rev=933892&view=rev
Log:
CAMEL-2643 Supported to get the authentication object from SecurityContextHolder

Modified:
    
camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
    
camel/trunk/components/camel-spring-security/src/main/resources/schema/camel-spring-security.xsd

Modified: 
camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java?rev=933892&r1=933891&r2=933892&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
 (original)
+++ 
camel/trunk/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
 Wed Apr 14 09:34:30 2010
@@ -34,6 +34,7 @@ import org.springframework.security.Auth
 import org.springframework.security.AuthenticationManager;
 import org.springframework.security.ConfigAttributeDefinition;
 import org.springframework.security.SpringSecurityException;
+import org.springframework.security.context.SecurityContextHolder;
 import 
org.springframework.security.event.authorization.AuthorizationFailureEvent;
 import org.springframework.security.event.authorization.AuthorizedEvent;
 import org.springframework.util.Assert;
@@ -46,6 +47,7 @@ public class SpringSecurityAuthorization
     private SpringSecurityAccessPolicy accessPolicy;
     
     private boolean alwaysReauthenticate;
+    private boolean useThreadSecurityContext = true;
     
 
     public Processor wrap(RouteContext routeContext, Processor processor) {
@@ -57,8 +59,8 @@ public class SpringSecurityAuthorization
         ConfigAttributeDefinition attributes = 
accessPolicy.getConfigAttributeDefinition();
         
         try {
-        
-            Authentication authenticated = 
authenticateIfRequired(exchange.getProperty(Exchange.AUTHENTICATION, 
Authentication.class));
+            
+            Authentication authenticated = 
authenticateIfRequired(getAuthentication(exchange));
             
             // Attempt authorization with exchange
             try {
@@ -78,6 +80,19 @@ public class SpringSecurityAuthorization
         }
     }
     
+    protected Authentication getAuthentication(Exchange exchange) {
+        Authentication answer = exchange.getProperty(Exchange.AUTHENTICATION, 
Authentication.class);
+        // try to get it from thread context as a fallback
+        if (answer == null && useThreadSecurityContext) {
+            answer = SecurityContextHolder.getContext().getAuthentication();
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Get the authentication from SecurityContextHolder");
+            }
+        }
+        
+        return answer;
+    }
+
     private class AuthorizeDelegateProcess extends DelegateProcessor {
         
         AuthorizeDelegateProcess(Processor processor) {
@@ -150,6 +165,14 @@ public class SpringSecurityAuthorization
     public void setAlwaysReauthenticate(boolean alwaysReauthenticate) {
         this.alwaysReauthenticate = alwaysReauthenticate;
     }
+    
+    public boolean isUseThreadSecurityContext() {
+        return useThreadSecurityContext;
+    }
+    
+    public void setUseThreadSecurityContext(boolean useThreadSecurityContext) {
+        this.useThreadSecurityContext = useThreadSecurityContext;
+    }
 
     public void setAuthenticationManager(AuthenticationManager newManager) {
         this.authenticationManager = newManager;

Modified: 
camel/trunk/components/camel-spring-security/src/main/resources/schema/camel-spring-security.xsd
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring-security/src/main/resources/schema/camel-spring-security.xsd?rev=933892&r1=933891&r2=933892&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring-security/src/main/resources/schema/camel-spring-security.xsd
 (original)
+++ 
camel/trunk/components/camel-spring-security/src/main/resources/schema/camel-spring-security.xsd
 Wed Apr 14 09:34:30 2010
@@ -17,7 +17,7 @@
   specific language governing permissions and limitations
   under the License.
 -->
-<xsd:schema xmlns="http://camel.apache.org/schema/spring/integration";
+<xsd:schema xmlns="http://camel.apache.org/schema/spring-security";
   xmlns:xsd="http://www.w3.org/2001/XMLSchema";
   xmlns:beans="http://www.springframework.org/schema/beans";
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";


Reply via email to