web/src/main/java/org/springframework/security/web/authentication/switchuser/SwitchUserFilter.java
private UsernamePasswordAuthenticationToken createSwitchUserToken(
			HttpServletRequest request, UserDetails targetUser) {

		UsernamePasswordAuthenticationToken targetUserRequest;

		// grant an additional authority that contains the original Authentication object
		// which will be used to 'exit' from the current switched user.

		Authentication currentAuth;

		try {
			// SEC-1763. Check first if we are already switched.
			currentAuth = attemptExitUser(request);
		}
		catch (AuthenticationCredentialsNotFoundException e) {
			currentAuth = SecurityContextHolder.getContext().getAuthentication();
		}

		GrantedAuthority switchAuthority = new SwitchUserGrantedAuthority(
				this.switchAuthorityRole, currentAuth);

		// get the original authorities
		Collection<? extends GrantedAuthority> orig = targetUser.getAuthorities();

		// Allow subclasses to change the authorities to be granted
		if (this.switchUserAuthorityChanger != null) {
			orig = this.switchUserAuthorityChanger.modifyGrantedAuthorities(targetUser,
					currentAuth, orig);
		}

		// add the new switch user authority
		List<GrantedAuthority> newAuths = new ArrayList<>(orig);
		newAuths.add(switchAuthority);

		// create the new authentication token
		targetUserRequest = new UsernamePasswordAuthenticationToken(targetUser,
				targetUser.getPassword(), newAuths);

		// set details
		targetUserRequest
				.setDetails(this.authenticationDetailsSource.buildDetails(request));

		return targetUserRequest;
	}
private UsernamePasswordAuthenticationToken createSwitchUserToken(
			HttpServletRequest request, UserDetails targetUser) {

		UsernamePasswordAuthenticationToken targetUserRequest;

		// grant an additional authority that contains the original Authentication object
		// which will be used to 'exit' from the current switched user.

		Authentication currentAuth;

		try {
			// SEC-1763. Check first if we are already switched.
			currentAuth = attemptExitUser(request);
		}
		catch (AuthenticationCredentialsNotFoundException e) {
			currentAuth = SecurityContextHolder.getContext().getAuthentication();
		}

		GrantedAuthority switchAuthority = new SwitchUserGrantedAuthority(
				this.switchAuthorityRole, currentAuth);

		// get the original authorities
		Collection<? extends GrantedAuthority> orig = targetUser.getAuthorities();

		// Allow subclasses to change the authorities to be granted
		if (this.switchUserAuthorityChanger != null) {
			orig = this.switchUserAuthorityChanger.modifyGrantedAuthorities(targetUser,
					currentAuth, orig);
		}

		// add the new switch user authority
		List<GrantedAuthority> newAuths = new ArrayList<>(orig);
		newAuths.add(switchAuthority);

		// create the new authentication token
		targetUserRequest = new UsernamePasswordAuthenticationToken(targetUser,
				targetUser.getPassword(), newAuths);

		// set details
		targetUserRequest
				.setDetails(this.authenticationDetailsSource.buildDetails(request));

		return targetUserRequest;
	}
private UsernamePasswordAuthenticationToken createSwitchUserToken ( HttpServletRequest request , UserDetails targetUser ) { UsernamePasswordAuthenticationToken targetUserRequest ; // grant an additional authority that contains the original Authentication object // which will be used to 'exit' from the current switched user. Authentication currentAuth ; try { // SEC-1763. Check first if we are already switched. currentAuth = attemptExitUser ( request ) ; } catch ( AuthenticationCredentialsNotFoundException e ) { currentAuth = SecurityContextHolder . getContext ( ) . getAuthentication ( ) ; } GrantedAuthority switchAuthority = new SwitchUserGrantedAuthority ( this . switchAuthorityRole , currentAuth ) ; // get the original authorities Collection < ? extends GrantedAuthority > orig = targetUser . getAuthorities ( ) ; // Allow subclasses to change the authorities to be granted if ( this . switchUserAuthorityChanger != null ) { orig = this . switchUserAuthorityChanger . modifyGrantedAuthorities ( targetUser , currentAuth , orig ) ; } // add the new switch user authority List < GrantedAuthority > newAuths = new ArrayList <> ( orig ) ; newAuths . add ( switchAuthority ) ; // create the new authentication token targetUserRequest = new UsernamePasswordAuthenticationToken ( targetUser , targetUser . getPassword ( ) , newAuths ) ; // set details targetUserRequest . setDetails ( this . authenticationDetailsSource . buildDetails ( request ) ) ; return targetUserRequest ; }
Create a switch user token that contains an additional <tt>GrantedAuthority</tt>
that contains the original <code>Authentication</code> object.

@param request The http servlet request.
@param targetUser The target user

@return The authentication token

@see SwitchUserGrantedAuthority
Create a switch user token that contains an additional <tt > GrantedAuthority< / tt > that contains the original <code > Authentication< / code > object .