Skip to content

Commit c5b3666

Browse files
committed
Polish PrincipalSid
Remove reduntant UserDetails check and add tests
1 parent ea148d5 commit c5b3666

File tree

2 files changed

+67
-7
lines changed

2 files changed

+67
-7
lines changed

acl/src/main/java/org/springframework/security/acls/domain/PrincipalSid.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
import org.springframework.security.acls.model.Sid;
1919
import org.springframework.security.core.Authentication;
20-
import org.springframework.security.core.userdetails.UserDetails;
2120

2221
import org.springframework.util.Assert;
2322

@@ -49,12 +48,7 @@ public PrincipalSid(Authentication authentication) {
4948
Assert.notNull(authentication, "Authentication required");
5049
Assert.notNull(authentication.getPrincipal(), "Principal required");
5150

52-
if (authentication.getPrincipal() instanceof UserDetails) {
53-
this.principal = ((UserDetails) authentication.getPrincipal()).getUsername();
54-
}
55-
else {
56-
this.principal = authentication.getName();
57-
}
51+
this.principal = authentication.getName();
5852
}
5953

6054
// ~ Methods

acl/src/test/java/org/springframework/security/acls/sid/SidTests.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,15 @@
2222
import org.springframework.security.acls.domain.GrantedAuthoritySid;
2323
import org.springframework.security.acls.domain.PrincipalSid;
2424
import org.springframework.security.acls.model.Sid;
25+
import org.springframework.security.authentication.AbstractAuthenticationToken;
2526
import org.springframework.security.authentication.TestingAuthenticationToken;
2627
import org.springframework.security.core.Authentication;
2728
import org.springframework.security.core.GrantedAuthority;
2829
import org.springframework.security.core.authority.SimpleGrantedAuthority;
30+
import org.springframework.security.core.userdetails.User;
31+
32+
import java.util.Collection;
33+
import java.util.Collections;
2934

3035
public class SidTests {
3136

@@ -211,4 +216,65 @@ public void testGetters() {
211216
assertThat("ROLE_TEST".equals(gaSid.getGrantedAuthority())).isTrue();
212217
assertThat("ROLE_TEST2".equals(gaSid.getGrantedAuthority())).isFalse();
213218
}
219+
220+
@Test
221+
public void getPrincipalWhenPrincipalInstanceOfUserDetailsThenReturnsUsername() {
222+
User user = new User("user", "password", Collections.singletonList(new SimpleGrantedAuthority("ROLE_TEST")));
223+
Authentication authentication = new TestingAuthenticationToken(user, "password");
224+
PrincipalSid principalSid = new PrincipalSid(authentication);
225+
226+
assertThat("user").isEqualTo(principalSid.getPrincipal());
227+
}
228+
229+
@Test
230+
public void getPrincipalWhenPrincipalNotInstanceOfUserDetailsThenReturnsPrincipalName() {
231+
Authentication authentication = new TestingAuthenticationToken("token", "password");
232+
PrincipalSid principalSid = new PrincipalSid(authentication);
233+
234+
assertThat("token").isEqualTo(principalSid.getPrincipal());
235+
}
236+
237+
@Test
238+
public void getPrincipalWhenCustomAuthenticationPrincipalThenReturnsPrincipalName() {
239+
Authentication authentication = new CustomAuthenticationToken(new CustomToken("token"), null);
240+
PrincipalSid principalSid = new PrincipalSid(authentication);
241+
242+
assertThat("token").isEqualTo(principalSid.getPrincipal());
243+
}
244+
245+
static class CustomAuthenticationToken extends AbstractAuthenticationToken {
246+
private CustomToken principal;
247+
248+
CustomAuthenticationToken(CustomToken principal, Collection<GrantedAuthority> authorities) {
249+
super(authorities);
250+
this.principal = principal;
251+
}
252+
253+
@Override
254+
public Object getCredentials() {
255+
return null;
256+
}
257+
258+
@Override
259+
public CustomToken getPrincipal() {
260+
return this.principal;
261+
}
262+
263+
@Override
264+
public String getName() {
265+
return principal.getName();
266+
}
267+
}
268+
269+
static class CustomToken {
270+
private String name;
271+
272+
CustomToken(String name) {
273+
this.name = name;
274+
}
275+
276+
String getName() {
277+
return name;
278+
}
279+
}
214280
}

0 commit comments

Comments
 (0)