| 
					
				 | 
			
			
				@@ -3,6 +3,7 @@ package org.springframework.security.providers.preauth; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.providers.AuthenticationProvider;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.Authentication;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.AuthenticationException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.springframework.security.BadCredentialsException;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.userdetails.UserDetails;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.userdetails.UserDetailsChecker;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.security.userdetails.checker.AccountStatusUserDetailsChecker;
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -32,7 +33,8 @@ public class PreAuthenticatedAuthenticationProvider implements AuthenticationPro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private static final Log logger = LogFactory.getLog(PreAuthenticatedAuthenticationProvider.class);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private AuthenticationUserDetailsService preAuthenticatedUserDetailsService = null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    private UserDetailsChecker userDetailsChecker = new AccountStatusUserDetailsChecker();    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private UserDetailsChecker userDetailsChecker = new AccountStatusUserDetailsChecker(); 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private boolean throwExceptionWhenTokenRejected = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private int order = -1; // default: same as non-ordered
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -40,7 +42,7 @@ public class PreAuthenticatedAuthenticationProvider implements AuthenticationPro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      * Check whether all required properties have been set.
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void afterPropertiesSet() {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Assert.notNull(preAuthenticatedUserDetailsService, "A AuthenticationUserDetailsService must be set");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Assert.notNull(preAuthenticatedUserDetailsService, "An AuthenticationUserDetailsService must be set");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /**
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -58,11 +60,24 @@ public class PreAuthenticatedAuthenticationProvider implements AuthenticationPro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             logger.debug("PreAuthenticated authentication request: " + authentication);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(authentication.getPrincipal() == null) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (authentication.getPrincipal() == null) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             logger.debug("No pre-authenticated principal found in request.");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (throwExceptionWhenTokenRejected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BadCredentialsException("No pre-authenticated principal found in request.");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (authentication.getCredentials() == null) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            logger.debug("No pre-authenticated credentials found in request.");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (throwExceptionWhenTokenRejected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                throw new BadCredentialsException("No pre-authenticated credentials found in request.");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            }            
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return null;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         UserDetails ud = preAuthenticatedUserDetailsService.loadUserDetails(authentication);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         userDetailsChecker.check(ud);
 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -98,4 +113,13 @@ public class PreAuthenticatedAuthenticationProvider implements AuthenticationPro 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void setOrder(int i) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         order = i;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * If true, causes the provider to throw a BadCredentialsException if the presented authentication 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * request is invalid (contains a null principal or credentials). Otherwise it will just return 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * null.  
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */    
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void setThrowExceptionWhenTokenRejected(boolean throwExceptionWhenTokenRejected) {
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.throwExceptionWhenTokenRejected = throwExceptionWhenTokenRejected;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }
 
			 |