Skip to content

Commit 75d0324

Browse files
committed
Returns the name of the authenticated principle instead of falling through to the toString() method which may render a string representation of the entire object rather than a username.
1 parent a2aeb95 commit 75d0324

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

web/src/main/java/org/springframework/security/web/servletapi/SecurityContextHolderAwareRequestWrapper.java

+4
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import org.springframework.security.authentication.AuthenticationTrustResolver;
2626
import org.springframework.security.authentication.AuthenticationTrustResolverImpl;
27+
import org.springframework.security.core.AuthenticatedPrincipal;
2728
import org.springframework.security.core.Authentication;
2829
import org.springframework.security.core.GrantedAuthority;
2930
import org.springframework.security.core.context.SecurityContextHolder;
@@ -106,6 +107,9 @@ public String getRemoteUser() {
106107
if (auth.getPrincipal() instanceof UserDetails) {
107108
return ((UserDetails) auth.getPrincipal()).getUsername();
108109
}
110+
if (auth.getPrincipal() instanceof AuthenticatedPrincipal) {
111+
return ((AuthenticatedPrincipal) auth.getPrincipal()).getName();
112+
}
109113
return auth.getPrincipal().toString();
110114
}
111115

web/src/test/java/org/springframework/security/web/servletapi/SecurityContextHolderAwareRequestWrapperTests.java

+19
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,17 @@
2121

2222
import org.springframework.mock.web.MockHttpServletRequest;
2323
import org.springframework.security.authentication.TestingAuthenticationToken;
24+
import org.springframework.security.core.AuthenticatedPrincipal;
2425
import org.springframework.security.core.Authentication;
2526
import org.springframework.security.core.authority.AuthorityUtils;
2627
import org.springframework.security.core.context.SecurityContextHolder;
2728
import org.springframework.security.core.userdetails.User;
2829

2930
import static org.assertj.core.api.Assertions.assertThat;
31+
import static org.mockito.BDDMockito.given;
32+
import static org.mockito.Mockito.mock;
33+
import static org.mockito.Mockito.times;
34+
import static org.mockito.Mockito.verify;
3035

3136
/**
3237
* Tests {@link SecurityContextHolderAwareRequestWrapper}.
@@ -130,4 +135,18 @@ public void testRolePrefixNotAppliedIfRoleStartsWith() {
130135
assertThat(wrapper.isUserInRole("ROLE_FOOBAR")).isTrue();
131136
}
132137

138+
@Test
139+
public void testGetRemoteUserStringWithAuthenticatedPrinciple() {
140+
String username = "authPrincipleUsername";
141+
AuthenticatedPrincipal principal = mock(AuthenticatedPrincipal.class);
142+
given(principal.getName()).willReturn(username);
143+
Authentication auth = new TestingAuthenticationToken(principal, "user");
144+
SecurityContextHolder.getContext().setAuthentication(auth);
145+
MockHttpServletRequest request = new MockHttpServletRequest();
146+
request.setRequestURI("/");
147+
SecurityContextHolderAwareRequestWrapper wrapper = new SecurityContextHolderAwareRequestWrapper(request, "");
148+
assertThat(wrapper.getRemoteUser()).isEqualTo(username);
149+
verify(principal, times(1)).getName();
150+
}
151+
133152
}

0 commit comments

Comments
 (0)