|
|
|
|
@ -95,7 +95,8 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
@@ -95,7 +95,8 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
|
|
|
|
|
public void destroy() {} |
|
|
|
|
|
|
|
|
|
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
|
|
|
|
throws IOException, ServletException { |
|
|
|
|
throws IOException, ServletException { |
|
|
|
|
|
|
|
|
|
if (!(request instanceof HttpServletRequest)) { |
|
|
|
|
throw new ServletException("Can only process HttpServletRequest"); |
|
|
|
|
} |
|
|
|
|
@ -126,15 +127,9 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
@@ -126,15 +127,9 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
|
|
|
|
|
password = token.substring(delim + 1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Only reauthenticate if username doesn't match SecurityContextHolder and user isn't authenticated (see SEC-53)
|
|
|
|
|
Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication(); |
|
|
|
|
|
|
|
|
|
// Limit username comparison to providers which user usernames (ie UsernamePasswordAuthenticationToken) (see SEC-348)
|
|
|
|
|
if ((existingAuth == null) |
|
|
|
|
|| (existingAuth instanceof UsernamePasswordAuthenticationToken && !existingAuth.getName().equals(username)) |
|
|
|
|
|| !existingAuth.isAuthenticated()) { |
|
|
|
|
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username, |
|
|
|
|
password); |
|
|
|
|
if (authenticationIsRequired(username)) { |
|
|
|
|
UsernamePasswordAuthenticationToken authRequest = |
|
|
|
|
new UsernamePasswordAuthenticationToken(username, password); |
|
|
|
|
authRequest.setDetails(authenticationDetailsSource.buildDetails((HttpServletRequest) request)); |
|
|
|
|
|
|
|
|
|
Authentication authResult; |
|
|
|
|
@ -178,6 +173,25 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
@@ -178,6 +173,25 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
|
|
|
|
|
chain.doFilter(request, response); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean authenticationIsRequired(String username) { |
|
|
|
|
// Only reauthenticate if username doesn't match SecurityContextHolder and user isn't authenticated
|
|
|
|
|
// (see SEC-53)
|
|
|
|
|
Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication(); |
|
|
|
|
|
|
|
|
|
if(existingAuth == null || !existingAuth.isAuthenticated()) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Limit username comparison to providers which use usernames (ie UsernamePasswordAuthenticationToken)
|
|
|
|
|
// (see SEC-348)
|
|
|
|
|
|
|
|
|
|
if (existingAuth instanceof UsernamePasswordAuthenticationToken && !existingAuth.getName().equals(username)) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public AuthenticationEntryPoint getAuthenticationEntryPoint() { |
|
|
|
|
return authenticationEntryPoint; |
|
|
|
|
} |
|
|
|
|
|