| 
					
				 | 
			
			
				@@ -153,6 +153,8 @@ public abstract class AbstractProcessingFilter extends SpringSecurityFilter impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private RememberMeServices rememberMeServices = new NullRememberMeServices(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private TargetUrlResolver targetUrlResolver = new TargetUrlResolverImpl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** Where to redirect the browser to if authentication fails */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private String authenticationFailureUrl; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -216,7 +218,8 @@ public abstract class AbstractProcessingFilter extends SpringSecurityFilter impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Assert.hasLength(defaultTargetUrl, "defaultTargetUrl must be specified"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Assert.hasLength(authenticationFailureUrl, "authenticationFailureUrl must be specified"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Assert.notNull(authenticationManager, "authenticationManager must be specified"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        Assert.notNull(this.rememberMeServices); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Assert.notNull(rememberMeServices, "rememberMeServices cannot be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Assert.notNull(targetUrlResolver, "targetUrlResolver cannot be null"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /** 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -266,6 +269,12 @@ public abstract class AbstractProcessingFilter extends SpringSecurityFilter impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public static String obtainFullSavedRequestUrl(HttpServletRequest request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	SavedRequest savedRequest = getSavedRequest(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return savedRequest == null ? null : savedRequest.getFullRequestUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private static SavedRequest getSavedRequest(HttpServletRequest request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         HttpSession session = request.getSession(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (session == null) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -274,9 +283,9 @@ public abstract class AbstractProcessingFilter extends SpringSecurityFilter impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         SavedRequest savedRequest = (SavedRequest) session.getAttribute(SPRING_SECURITY_SAVED_REQUEST_KEY); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return savedRequest == null ? null : savedRequest.getFullRequestUrl(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return savedRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     protected void onPreAuthentication(HttpServletRequest request, HttpServletResponse response) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throws AuthenticationException, IOException { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -416,9 +425,9 @@ public abstract class AbstractProcessingFilter extends SpringSecurityFilter impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     protected String determineTargetUrl(HttpServletRequest request) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // Don't attempt to obtain the url from the saved request if 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        // alwaysUsedefaultTargetUrl is set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        String targetUrl = alwaysUseDefaultTargetUrl ? null : obtainFullSavedRequestUrl(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        // Don't attempt to obtain the url from the saved request if alwaysUsedefaultTargetUrl is set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    	String targetUrl = alwaysUseDefaultTargetUrl ? null :  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    		targetUrlResolver.determineTargetUrl(getSavedRequest(request), request, SecurityContextHolder.getContext().getAuthentication()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (targetUrl == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             targetUrl = getDefaultTargetUrl(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -578,4 +587,18 @@ public abstract class AbstractProcessingFilter extends SpringSecurityFilter impl 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void setAllowSessionCreation(boolean allowSessionCreation) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.allowSessionCreation = allowSessionCreation; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @return the targetUrlResolver 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	protected TargetUrlResolver getTargetUrlResolver() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return targetUrlResolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 * @param targetUrlResolver the targetUrlResolver to set 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	public void setTargetUrlResolver(TargetUrlResolver targetUrlResolver) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.targetUrlResolver = targetUrlResolver; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |