diff --git a/ntlm/src/main/java/org/springframework/security/ui/ntlm/NtlmProcessingFilter.java b/ntlm/src/main/java/org/springframework/security/ui/ntlm/NtlmProcessingFilter.java index 0bcbdb21f0..b1874aa091 100755 --- a/ntlm/src/main/java/org/springframework/security/ui/ntlm/NtlmProcessingFilter.java +++ b/ntlm/src/main/java/org/springframework/security/ui/ntlm/NtlmProcessingFilter.java @@ -27,6 +27,8 @@ import org.springframework.security.providers.anonymous.AnonymousAuthenticationT import org.springframework.security.ui.SpringSecurityFilter; import org.springframework.security.ui.WebAuthenticationDetails; import org.springframework.security.ui.FilterChainOrder; +import org.springframework.security.ui.AuthenticationDetailsSource; +import org.springframework.security.ui.AuthenticationDetailsSourceImpl; import org.springframework.security.ui.webapp.AuthenticationProcessingFilter; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; @@ -46,6 +48,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.servlet.FilterChain; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @@ -110,8 +113,9 @@ public class NtlmProcessingFilter extends SpringSecurityFilter implements Initia private String defaultDomain; private String domainController; private AuthenticationManager authenticationManager; + private AuthenticationDetailsSource authenticationDetailsSource = new AuthenticationDetailsSourceImpl(); - //~ Methods ======================================================================================================== + //~ Methods ======================================================================================================== /** * Ensures an AuthenticationManager and authentication failure @@ -295,7 +299,13 @@ public class NtlmProcessingFilter extends SpringSecurityFilter implements Initia this.retryOnAuthFailure = retryOnFailure; } - protected void doFilterHttp(final HttpServletRequest request, final HttpServletResponse response, final FilterChain chain) throws IOException { + public void setAuthenticationDetailsSource(AuthenticationDetailsSource authenticationDetailsSource) { + Assert.notNull(authenticationDetailsSource, "authenticationDetailsSource cannot be null"); + this.authenticationDetailsSource = authenticationDetailsSource; + } + + protected void doFilterHttp(final HttpServletRequest request, + final HttpServletResponse response, final FilterChain chain) throws IOException, ServletException { final HttpSession session = request.getSession(); Integer ntlmState = (Integer) session.getAttribute(STATE_ATTR); @@ -337,7 +347,9 @@ public class NtlmProcessingFilter extends SpringSecurityFilter implements Initia } } } - } + + chain.doFilter(request, response); + } /** * Returns true if reauthentication is needed on an IE POST. @@ -424,7 +436,7 @@ public class NtlmProcessingFilter extends SpringSecurityFilter implements Initia final Authentication backupAuth; authRequest = new NtlmUsernamePasswordAuthenticationToken(auth, stripDomain); - authRequest.setDetails(new WebAuthenticationDetails(request)); + authRequest.setDetails(authenticationDetailsSource.buildDetails(request)); // Place the last username attempted into HttpSession for views session.setAttribute(AuthenticationProcessingFilter.SPRING_SECURITY_LAST_USERNAME_KEY, authRequest.getName());