SEC-348: Limit Basic automatic reauthentication scope to UsernamePasswordAuthenticationToken (specifically avoid CasAuthenticationToken).
This commit is contained in:
parent
ab7816db41
commit
21dd050d7b
|
@ -15,27 +15,6 @@
|
||||||
|
|
||||||
package org.acegisecurity.ui.basicauth;
|
package org.acegisecurity.ui.basicauth;
|
||||||
|
|
||||||
import org.acegisecurity.Authentication;
|
|
||||||
import org.acegisecurity.AuthenticationException;
|
|
||||||
import org.acegisecurity.AuthenticationManager;
|
|
||||||
|
|
||||||
import org.acegisecurity.context.SecurityContextHolder;
|
|
||||||
|
|
||||||
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
|
|
||||||
|
|
||||||
import org.acegisecurity.ui.AuthenticationDetailsSource;
|
|
||||||
import org.acegisecurity.ui.AuthenticationDetailsSourceImpl;
|
|
||||||
import org.acegisecurity.ui.AuthenticationEntryPoint;
|
|
||||||
import org.acegisecurity.ui.rememberme.RememberMeServices;
|
|
||||||
|
|
||||||
import org.apache.commons.codec.binary.Base64;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.InitializingBean;
|
|
||||||
|
|
||||||
import org.springframework.util.Assert;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
|
@ -47,6 +26,21 @@ import javax.servlet.ServletResponse;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import org.acegisecurity.Authentication;
|
||||||
|
import org.acegisecurity.AuthenticationException;
|
||||||
|
import org.acegisecurity.AuthenticationManager;
|
||||||
|
import org.acegisecurity.context.SecurityContextHolder;
|
||||||
|
import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;
|
||||||
|
import org.acegisecurity.ui.AuthenticationDetailsSource;
|
||||||
|
import org.acegisecurity.ui.AuthenticationDetailsSourceImpl;
|
||||||
|
import org.acegisecurity.ui.AuthenticationEntryPoint;
|
||||||
|
import org.acegisecurity.ui.rememberme.RememberMeServices;
|
||||||
|
import org.apache.commons.codec.binary.Base64;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.beans.factory.InitializingBean;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Processes a HTTP request's BASIC authorization headers, putting the result into the
|
* Processes a HTTP request's BASIC authorization headers, putting the result into the
|
||||||
|
@ -135,7 +129,10 @@ public class BasicProcessingFilter implements Filter, InitializingBean {
|
||||||
// Only reauthenticate if username doesn't match SecurityContextHolder and user isn't authenticated (see SEC-53)
|
// Only reauthenticate if username doesn't match SecurityContextHolder and user isn't authenticated (see SEC-53)
|
||||||
Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication();
|
Authentication existingAuth = SecurityContextHolder.getContext().getAuthentication();
|
||||||
|
|
||||||
if ((existingAuth == null) || !existingAuth.getName().equals(username) || !existingAuth.isAuthenticated()) {
|
// 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,
|
UsernamePasswordAuthenticationToken authRequest = new UsernamePasswordAuthenticationToken(username,
|
||||||
password);
|
password);
|
||||||
authRequest.setDetails(authenticationDetailsSource.buildDetails((HttpServletRequest) request));
|
authRequest.setDetails(authenticationDetailsSource.buildDetails((HttpServletRequest) request));
|
||||||
|
|
Loading…
Reference in New Issue