You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2010/04/14 11:34:30 UTC

svn commit: r933892 - in /camel/trunk/components/camel-spring-security/src/main: java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java resources/schema/camel-spring-security.xsd

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"