mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-07-08 19:42:48 +00:00
SEC-418: Applied patch from issue.
This commit is contained in:
parent
e41860d944
commit
b253510127
@ -55,7 +55,6 @@ import org.springframework.util.Assert;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.servlet.Filter;
|
import javax.servlet.Filter;
|
||||||
@ -102,8 +101,6 @@ public class SwitchUserProcessingFilter implements Filter, InitializingBean, App
|
|||||||
|
|
||||||
private static final Log logger = LogFactory.getLog(SwitchUserProcessingFilter.class);
|
private static final Log logger = LogFactory.getLog(SwitchUserProcessingFilter.class);
|
||||||
|
|
||||||
// ~ Static fields/initializers
|
|
||||||
// =============================================
|
|
||||||
public static final String ACEGI_SECURITY_SWITCH_USERNAME_KEY = "j_username";
|
public static final String ACEGI_SECURITY_SWITCH_USERNAME_KEY = "j_username";
|
||||||
public static final String ROLE_PREVIOUS_ADMINISTRATOR = "ROLE_PREVIOUS_ADMINISTRATOR";
|
public static final String ROLE_PREVIOUS_ADMINISTRATOR = "ROLE_PREVIOUS_ADMINISTRATOR";
|
||||||
|
|
||||||
@ -116,9 +113,6 @@ public class SwitchUserProcessingFilter implements Filter, InitializingBean, App
|
|||||||
private String switchUserUrl = "/j_acegi_switch_user";
|
private String switchUserUrl = "/j_acegi_switch_user";
|
||||||
private String targetUrl;
|
private String targetUrl;
|
||||||
private SwitchUserAuthorityChanger switchUserAuthorityChanger;
|
private SwitchUserAuthorityChanger switchUserAuthorityChanger;
|
||||||
|
|
||||||
// ~ Instance fields
|
|
||||||
// ========================================================
|
|
||||||
private UserDetailsService userDetailsService;
|
private UserDetailsService userDetailsService;
|
||||||
|
|
||||||
//~ Methods ========================================================================================================
|
//~ Methods ========================================================================================================
|
||||||
@ -276,7 +270,10 @@ public class SwitchUserProcessingFilter implements Filter, InitializingBean, App
|
|||||||
GrantedAuthority switchAuthority = new SwitchUserGrantedAuthority(ROLE_PREVIOUS_ADMINISTRATOR, currentAuth);
|
GrantedAuthority switchAuthority = new SwitchUserGrantedAuthority(ROLE_PREVIOUS_ADMINISTRATOR, currentAuth);
|
||||||
|
|
||||||
// get the original authorities
|
// get the original authorities
|
||||||
List orig = Arrays.asList(targetUser.getAuthorities());
|
ArrayList orig = new ArrayList();
|
||||||
|
for (int i = 0; i < targetUser.getAuthorities().length; i++) {
|
||||||
|
orig.add(targetUser.getAuthorities()[i]);
|
||||||
|
}
|
||||||
|
|
||||||
// Allow subclasses to change the authorities to be granted
|
// Allow subclasses to change the authorities to be granted
|
||||||
if (switchUserAuthorityChanger != null) {
|
if (switchUserAuthorityChanger != null) {
|
||||||
@ -443,7 +440,7 @@ public class SwitchUserProcessingFilter implements Filter, InitializingBean, App
|
|||||||
/**
|
/**
|
||||||
* Sets the authentication data access object.
|
* Sets the authentication data access object.
|
||||||
*
|
*
|
||||||
* @param authenticationDao The authentication dao
|
* @param userDetailsService The UserDetailsService to use
|
||||||
*/
|
*/
|
||||||
public void setUserDetailsService(UserDetailsService userDetailsService) {
|
public void setUserDetailsService(UserDetailsService userDetailsService) {
|
||||||
this.userDetailsService = userDetailsService;
|
this.userDetailsService = userDetailsService;
|
||||||
|
@ -41,6 +41,8 @@ import org.springframework.dao.DataAccessException;
|
|||||||
import org.springframework.mock.web.MockHttpServletRequest;
|
import org.springframework.mock.web.MockHttpServletRequest;
|
||||||
import org.springframework.mock.web.MockHttpServletResponse;
|
import org.springframework.mock.web.MockHttpServletResponse;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests {@link org.acegisecurity.ui.switchuser.SwitchUserProcessingFilter}.
|
* Tests {@link org.acegisecurity.ui.switchuser.SwitchUserProcessingFilter}.
|
||||||
@ -377,6 +379,28 @@ public class SwitchUserProcessingFilterTests extends TestCase {
|
|||||||
assertEquals("jacklord", ((User) targetAuth.getPrincipal()).getUsername());
|
assertEquals("jacklord", ((User) targetAuth.getPrincipal()).getUsername());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testModificationOfAuthoritiesWorks() {
|
||||||
|
UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken("dano", "hawaii50");
|
||||||
|
SecurityContextHolder.getContext().setAuthentication(auth);
|
||||||
|
|
||||||
|
MockHttpServletRequest request = new MockHttpServletRequest();
|
||||||
|
request.addParameter(SwitchUserProcessingFilter.ACEGI_SECURITY_SWITCH_USERNAME_KEY, "jacklord");
|
||||||
|
|
||||||
|
SwitchUserProcessingFilter filter = new SwitchUserProcessingFilter();
|
||||||
|
filter.setUserDetailsService(new MockAuthenticationDaoUserJackLord());
|
||||||
|
filter.setSwitchUserAuthorityChanger(new SwitchUserAuthorityChanger() {
|
||||||
|
public void modifyGrantedAuthorities(UserDetails targetUser, Authentication currentAuthentication, List authoritiesToBeGranted) {
|
||||||
|
authoritiesToBeGranted.clear();
|
||||||
|
authoritiesToBeGranted.add(new GrantedAuthorityImpl("ROLE_NEW"));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Authentication result = filter.attemptSwitchUser(request);
|
||||||
|
assertTrue(result != null);
|
||||||
|
assertEquals(2, result.getAuthorities().length);
|
||||||
|
assertEquals("ROLE_NEW", result.getAuthorities()[0].getAuthority());
|
||||||
|
}
|
||||||
|
|
||||||
//~ Inner Classes ==================================================================================================
|
//~ Inner Classes ==================================================================================================
|
||||||
|
|
||||||
private class MockAuthenticationDaoUserJackLord implements UserDetailsService {
|
private class MockAuthenticationDaoUserJackLord implements UserDetailsService {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user