From a8c9f997138a4b4df88f6a679dcac76ceff244e1 Mon Sep 17 00:00:00 2001 From: "bhill6@wisc.edu" <bhill6@wisc.edu> Date: Fri, 3 Mar 2017 13:45:27 -0600 Subject: [PATCH] Upgraded UDS services libraries to newer uds-person-client-java 2.0, and the 1.2 data model that includes access to preferred name. Also added displayName attribute to UWUserDetails that should be picked up from Shibboleth displayName header --- README.md | 3 +- pom.xml | 49 +++++++++++------- uw-spring-security-config/pom.xml | 2 +- .../uwss/configuration/uwss-SAMPLE.properties | 1 + uw-spring-security-core/pom.xml | 10 ++-- .../java/edu/wisc/uwss/UWUserDetails.java | 7 +++ .../java/edu/wisc/uwss/UWUserDetailsImpl.java | 15 ++++++ .../local/LocalUsersUdsPersonServiceImpl.java | 20 ++++---- ...thenticatedUserDetailsAttributeMapper.java | 14 ++++++ .../edu/wisc/uwss/uds/IdentifiersBuilder.java | 4 +- .../edu/wisc/uwss/uds/IdentifiersFactory.java | 3 +- .../uwss/uds/UdsPersonUserDetailsImpl.java | 50 ++++++++++++++++--- .../uds/UdsPersonUserDetailsServiceImpl.java | 6 +-- .../NotHasModifiableSourceUWUserDetails.java | 3 ++ ...ticatedUserDetailsAttributeMapperTest.java | 2 + ...UWUserDetailsAuthenticationFilterTest.java | 10 +++- .../wisc/uwss/uds/IdentifiersBuilderTest.java | 4 +- .../uds/UdsPersonUserDetailsImplTest.java | 27 ++++++++-- uw-spring-security-sample-war/pom.xml | 2 +- uw-spring-security-web/pom.xml | 2 +- .../wisc/uwss/web/uwframe/UwframeSession.java | 2 +- 21 files changed, 177 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 67e01f8..418c7bb 100644 --- a/README.md +++ b/README.md @@ -60,7 +60,8 @@ and get back an instance of [UWUserDetails](uw-spring-security-core/src/main/jav customLogoutUrl: null, isisEmplid: null, firstName: null, - lastName: null + lastName: null, + displayName: null } ``` diff --git a/pom.xml b/pom.xml index d88cecb..b6ffba4 100644 --- a/pom.xml +++ b/pom.xml @@ -2,7 +2,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>edu.wisc.uwss</groupId> <artifactId>uw-spring-security</artifactId> - <version>1.7.1-SNAPSHOT</version> + <version>1.8.0-SNAPSHOT</version> <packaging>pom</packaging> <name>UW Spring Security Parent</name> <description>Parent project for module to integrate Spring Security with UW authentication mechanism.</description> @@ -29,6 +29,10 @@ <id>code.doit-uw-releases</id> <url>https://code.doit.wisc.edu/maven/content/repositories/uw-releases/</url> </repository> + <repository> + <id>code.doit-public-releases</id> + <url>https://code.doit.wisc.edu/maven/content/repositories/public-releases</url> + </repository> </repositories> <properties> @@ -62,24 +66,33 @@ </dependency> <dependency> <groupId>edu.wisc.services.uds</groupId> - <artifactId>uds-person-data-model-1.1</artifactId> - <version>1.1.0</version> + <artifactId>uds-person-data-model-1.2</artifactId> + <version>1.0.0</version> + </dependency> + + <dependency> + <groupId>edu.wisc.services.uds</groupId> + <artifactId>uds-person-client-java</artifactId> + <version>2.0.0</version> + <exclusions> + <exclusion> + <groupId>org.apache.santuario</groupId> + <artifactId>xmlsec</artifactId> + </exclusion> + <exclusion> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-core</artifactId> + </exclusion> + <exclusion> + <groupId>org.springframework.ws</groupId> + <artifactId>spring-ws-core</artifactId> + </exclusion> + <exclusion> + <groupId>org.springframework.ws</groupId> + <artifactId>spring-ws-security</artifactId> + </exclusion> + </exclusions> </dependency> - <dependency> - <groupId>edu.wisc.services.uds</groupId> - <artifactId>uds-person-ws</artifactId> - <version>1.1.0</version> - <exclusions> - <exclusion> - <groupId>org.springframework.ws</groupId> - <artifactId>spring-ws-core</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework.ws</groupId> - <artifactId>spring-ws-security</artifactId> - </exclusion> - </exclusions> - </dependency> <dependency> <groupId>edu.wisc.uwss</groupId> <artifactId>uw-spring-security-config</artifactId> diff --git a/uw-spring-security-config/pom.xml b/uw-spring-security-config/pom.xml index bebbdf2..1a97f83 100644 --- a/uw-spring-security-config/pom.xml +++ b/uw-spring-security-config/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>edu.wisc.uwss</groupId> <artifactId>uw-spring-security</artifactId> - <version>1.7.1-SNAPSHOT</version> + <version>1.8.0-SNAPSHOT</version> </parent> <artifactId>uw-spring-security-config</artifactId> <name>UW Spring Security Configuration</name> diff --git a/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties b/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties index 9d0eae9..a5665dc 100644 --- a/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties +++ b/uw-spring-security-config/src/main/resources/edu/wisc/uwss/configuration/uwss-SAMPLE.properties @@ -6,6 +6,7 @@ preauth.headerValues=admin;admin@wisc.edu;UW000A000;Amy Administrator;A535000;am #preauth.pviHeader=wiscedupvi #preauth.usernameHeader=uid #preauth.fullnameHeader=cn +#preauth.displayNameHeader=displayName #preauth.uddsHeader=wisceduudds #preauth.emailAddressHeader=mail #preauth.identityProviderHeader=Shib-Identity-Provider diff --git a/uw-spring-security-core/pom.xml b/uw-spring-security-core/pom.xml index 01a7929..ab0c202 100644 --- a/uw-spring-security-core/pom.xml +++ b/uw-spring-security-core/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>edu.wisc.uwss</groupId> <artifactId>uw-spring-security</artifactId> - <version>1.7.1-SNAPSHOT</version> + <version>1.8.0-SNAPSHOT</version> </parent> <artifactId>uw-spring-security-core</artifactId> <name>UW Spring Security Core</name> @@ -18,10 +18,14 @@ <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency> - <dependency> + <!--<dependency> <groupId>edu.wisc.services.uds</groupId> <artifactId>uds-person-ws</artifactId> - </dependency> + </dependency>--> + <dependency> + <groupId>edu.wisc.services.uds</groupId> + <artifactId>uds-person-client-java</artifactId> + </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java index d0e6954..2c63fc6 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetails.java @@ -47,6 +47,13 @@ public interface UWUserDetails extends UserDetails { */ String getFullName(); + /** + * The Display Name is the preferred name if the user has set one, otherwise is simply + * the full name. + * @return the display name for this user, or null if not available + */ + String getDisplayName(); + /** * @return a never null, but potentially empty, {@link Collection} of {@link String}s each * representing the UDDS Ids of the groups this user is a member of. diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java index 00ed353..6fdd401 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/UWUserDetailsImpl.java @@ -39,6 +39,8 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia private String isisEmplid; private String firstName; private String lastName; + private String displayName; + /** * * @param pvi @@ -126,6 +128,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia setSource(original.getSource()); setFirstName(original.getFirstName()); setLastName(original.getLastName()); + setDisplayName(original.getDisplayName()); } /* (non-Javadoc) @@ -140,6 +143,15 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia return this.fullName; } + public String getDisplayName() { + return this.displayName; + } + + public UWUserDetailsImpl setDisplayName(String displayName) { + this.displayName = displayName; + return this; + } + public Collection<String> getUddsMembership() { return uddsMembership; } @@ -214,6 +226,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia .append("; "); sb.append("Source: ").append(getSource()).append("; "); sb.append("Emplid: ").append(getIsisEmplid()).append("; "); + sb.append("DisplayName: ").append(getDisplayName()).append("; "); sb.append("Custom Logout Url: ").append(getCustomLogoutUrl()); return sb.toString(); @@ -271,6 +284,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia if (eppn != null ? !eppn.equals(that.eppn) : that.eppn != null) return false; if (pvi != null ? !pvi.equals(that.pvi) : that.pvi != null) return false; if (fullName != null ? !fullName.equals(that.fullName) : that.fullName != null) return false; + if (displayName != null ? !displayName.equals(that.displayName) : that.displayName != null) return false; if (uddsMembership != null ? !uddsMembership.equals(that.uddsMembership) : that.uddsMembership != null) return false; if (emailAddress != null ? !emailAddress.equals(that.emailAddress) : that.emailAddress != null) @@ -292,6 +306,7 @@ public class UWUserDetailsImpl extends User implements UWUserDetails, HasModifia result = 31 * result + (eppn != null ? eppn.hashCode() : 0); result = 31 * result + (pvi != null ? pvi.hashCode() : 0); result = 31 * result + (fullName != null ? fullName.hashCode() : 0); + result = 31 * result + (displayName != null ? displayName.hashCode() : 0); result = 31 * result + (uddsMembership != null ? uddsMembership.hashCode() : 0); result = 31 * result + (emailAddress != null ? emailAddress.hashCode() : 0); result = 31 * result + (source != null ? source.hashCode() : 0); diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java index a499be1..66e6d90 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/local/LocalUsersUdsPersonServiceImpl.java @@ -12,15 +12,15 @@ import org.springframework.context.annotation.Profile; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import edu.wisc.services.uds.person.v1_1.Appointment; -import edu.wisc.services.uds.person.v1_1.Appointments; -import edu.wisc.services.uds.person.v1_1.Demographic; -import edu.wisc.services.uds.person.v1_1.Employee; -import edu.wisc.services.uds.person.v1_1.Identifier; -import edu.wisc.services.uds.person.v1_1.Identifiers; -import edu.wisc.services.uds.person.v1_1.Name; -import edu.wisc.services.uds.person.v1_1.Person; -import edu.wisc.services.uds.person.v1_1.UDDS; +import edu.wisc.uds.person.Appointment; +import edu.wisc.uds.person.Appointments; +import edu.wisc.uds.person.Demographic; +import edu.wisc.uds.person.Employee; +import edu.wisc.uds.person.Identifier; +import edu.wisc.uds.person.Identifiers; +import edu.wisc.uds.person.Name; +import edu.wisc.uds.person.Person; +import edu.wisc.uds.person.UDDS; import edu.wisc.uds.UdsPersonService; import edu.wisc.uwss.UWUserDetails; @@ -37,7 +37,7 @@ public class LocalUsersUdsPersonServiceImpl implements UdsPersonService { @Autowired private UserDetailsService userDetailsService; /* (non-Javadoc) - * @see edu.wisc.uds.UdsPersonService#getPerson(edu.wisc.services.uds.person.v1_1.Identifiers) + * @see edu.wisc.uds.UdsPersonService#getPerson(edu.wisc.uds.person.Identifiers) */ @Override public Person getPerson(Identifiers identifiers) { diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java index 5f49a42..ef6a2f3 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapper.java @@ -56,6 +56,7 @@ public interface PreauthenticatedUserDetailsAttributeMapper { private String uddsHeader = "wisceduudds"; private String emailAddressHeader = "mail"; private String firstNameHeader = "givenName"; + private String displayNameHeader = "displayName"; private String lastNameHeader = "sn"; private String isisEmplidHeader = "wisceduisisemplid"; private String identityProviderHeader = "Shib-Identity-Provider"; @@ -85,6 +86,7 @@ public interface PreauthenticatedUserDetailsAttributeMapper { String emplid = request.getHeader(isisEmplidHeader); Collection<String> uddsMembership = safeGetHeaders(request, uddsHeader); String email = request.getHeader(emailAddressHeader); + String displayName = request.getHeader(displayNameHeader); Collection<String> manifestGroups = new ArrayList<>(); String manifestValue = request.getHeader(manifestHeader); @@ -105,6 +107,7 @@ public interface PreauthenticatedUserDetailsAttributeMapper { result.setLastName(request.getHeader(lastNameHeader)); String identityProvider = request.getHeader(identityProviderHeader); result.setCustomLogoutUrl(toCustomLogoutUrl(identityProvider)); + result.setDisplayName(displayName); logger.debug("mapUser constructed {} from headers in request", result); return result; @@ -221,6 +224,17 @@ public interface PreauthenticatedUserDetailsAttributeMapper { public void setFullNameHeader(String fullNameHeader) { this.fullNameHeader = fullNameHeader; } + /** + * + * @return the displayNameHeader + */ + public String getDisplayNameHeader() { return displayNameHeader; } + /** + * + * @param displayNameHeader the displayNameHeader to set + */ + @Value("${preauth.displayNameHeader:displayName") + public void setDisplayNameHeader(String displayNameHeader) { this.displayNameHeader = displayNameHeader; } /** * @return the uddsHeader */ diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java index d015c2a..921aede 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersBuilder.java @@ -3,8 +3,8 @@ package edu.wisc.uwss.uds; import java.util.ArrayList; import java.util.List; -import edu.wisc.services.uds.person.v1_1.Identifier; -import edu.wisc.services.uds.person.v1_1.Identifiers; +import edu.wisc.uds.person.Identifier; +import edu.wisc.uds.person.Identifiers; /** * Builder pattern for constructing {@link IdentifiersBuilder}. diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java index d09a0cc..65f60dc 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/IdentifiersFactory.java @@ -1,6 +1,7 @@ package edu.wisc.uwss.uds; -import edu.wisc.services.uds.person.v1_1.Identifiers; + +import edu.wisc.uds.person.Identifiers; /** * Factory interface for constructing {@link Identifiers} for use with {@link UdsPersonUserDetailsServiceImpl}. diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java index da5aa1b..41814c3 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImpl.java @@ -11,13 +11,13 @@ import java.util.Set; import org.springframework.security.core.GrantedAuthority; import org.springframework.util.Assert; -import edu.wisc.services.uds.person.v1_1.Appointment; -import edu.wisc.services.uds.person.v1_1.Appointments; -import edu.wisc.services.uds.person.v1_1.Demographic; -import edu.wisc.services.uds.person.v1_1.Employee; -import edu.wisc.services.uds.person.v1_1.Identifier; -import edu.wisc.services.uds.person.v1_1.Name; -import edu.wisc.services.uds.person.v1_1.Person; +import edu.wisc.uds.person.Appointment; +import edu.wisc.uds.person.Appointments; +import edu.wisc.uds.person.Demographic; +import edu.wisc.uds.person.Employee; +import edu.wisc.uds.person.Identifier; +import edu.wisc.uds.person.Name; +import edu.wisc.uds.person.Person; import edu.wisc.uwss.UWUserDetails; /** @@ -210,7 +210,7 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails { * This implementation always returns null. * * TODO it may be possible to extract an emplid value from person.getIdentifiers - * Example observed: edu.wisc.services.uds.person.v1_1.Identifier@715ef617[source=UWMSNSS, idName=EMPLID, value=000123456] + * Example observed: edu.wisc.uds.person.Identifier@715ef617[source=UWMSNSS, idName=EMPLID, value=000123456] */ @Override public String getIsisEmplid() { @@ -238,6 +238,40 @@ public class UdsPersonUserDetailsImpl implements UWUserDetails { public String getLastName() { return getName() != null ? getName().getLast() : null; } + + /** + * Construct the Display Name from the preferred name. + * + * @return displayName value + */ + @Override + public String getDisplayName() { + if(getName()!=null) { + StringBuilder stringBuilder = new StringBuilder(); + + + /** + * If the preferred first name is empty, then use the + * given name. Shib should already be doing this + * for preauthenticated users. + */ + if(getName().getPreferredFirst()!=null) { + stringBuilder.append(getName().getPreferredFirst()); + } else if(getName().getFirst()!=null) { + stringBuilder.append(getName().getFirst()); + } + + if(getName().getLast()!=null) { + if(stringBuilder.length()>0) { + stringBuilder.append(" "); + } + stringBuilder.append(getName().getLast()); + } + return stringBuilder.toString(); + } else { + return null; + } + } /** * * @return {@link Demographic#getName()}, or null if not available diff --git a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java index 1b152ec..5934c39 100644 --- a/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java +++ b/uw-spring-security-core/src/main/java/edu/wisc/uwss/uds/UdsPersonUserDetailsServiceImpl.java @@ -7,9 +7,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; -import edu.wisc.services.uds.person.v1_1.Identifier; -import edu.wisc.services.uds.person.v1_1.Identifiers; -import edu.wisc.services.uds.person.v1_1.Person; +import edu.wisc.uds.person.Identifier; +import edu.wisc.uds.person.Identifiers; +import edu.wisc.uds.person.Person; import edu.wisc.uds.UdsPersonService; import edu.wisc.uwss.UWUserDetails; diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java index 9f71f6a..9a11b70 100644 --- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java +++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/local/NotHasModifiableSourceUWUserDetails.java @@ -63,6 +63,9 @@ final class NotHasModifiableSourceUWUserDetails implements UWUserDetails { @Override public String getFullName() { return null; } + @Override + public String getDisplayName() { return null; } + @Override public String getFirstName() { return null; } diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java index 08aa10d..1ff6f2b 100644 --- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java +++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/PreauthenticatedUserDetailsAttributeMapperTest.java @@ -185,6 +185,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest { request.addHeader("wiscedupvi", "1234567"); request.addHeader("uid", "somebody"); request.addHeader("cn", "some body"); + request.addHeader("displayName", "some one"); request.addHeader("mail", "some.body@wisc.edu"); request.addHeader("wisceduisisemplid", "0000123456"); request.addHeader("Shib-Identity-Provider", "https://logintest.wisc.edu/idp/shibboleth"); @@ -200,6 +201,7 @@ public class PreauthenticatedUserDetailsAttributeMapperTest { assertEquals("somebody@wisc.edu", result.getEppn()); assertEquals("1234567", result.getPvi()); assertEquals("some body", result.getFullName()); + assertEquals("some one", result.getDisplayName()); assertEquals("some.body@wisc.edu", result.getEmailAddress()); assertEquals("0000123456", result.getIsisEmplid()); assertEquals("/Shibboleth.sso/Logout?return=https://logintest.wisc.edu/logout/", result.getCustomLogoutUrl()); diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java index 324dbd6..5ce6950 100644 --- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java +++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/preauth/UWUserDetailsAuthenticationFilterTest.java @@ -36,6 +36,7 @@ public class UWUserDetailsAuthenticationFilterTest { when(request.getHeader("uid")).thenReturn("bbadger"); when(request.getHeader("eppn")).thenReturn("bbadger@wisc.edu"); when(request.getHeader("cn")).thenReturn("Bucky Badger"); + when(request.getHeader("displayName")).thenReturn("Buckingham Badger"); when(request.getHeaders("wisceduudds")).thenReturn(Collections.enumeration(Arrays.asList("A061234"))); when(request.getHeader("mail")).thenReturn("foo@foo.wisc.edu"); when(request.getHeader("isMemberOf")).thenReturn("somegroup"); @@ -43,6 +44,7 @@ public class UWUserDetailsAuthenticationFilterTest { assertEquals("bbadger", userDetails.getUsername()); assertEquals("bbadger@wisc.edu", userDetails.getEppn()); assertEquals("Bucky Badger", userDetails.getFullName()); + assertEquals("Buckingham Badger", userDetails.getDisplayName()); assertEquals("foo@foo.wisc.edu", userDetails.getEmailAddress()); assertEquals(1, userDetails.getUddsMembership().size()); assertEquals("A061234", userDetails.getUddsMembership().iterator().next()); @@ -59,10 +61,12 @@ public class UWUserDetailsAuthenticationFilterTest { HttpServletRequest request = mock(HttpServletRequest.class); when(request.getHeader("uid")).thenReturn("bbadger"); + when(request.getHeader("displayName")).thenReturn("Buckingham Badger"); when(request.getHeader("cn")).thenReturn("Bucky Badger"); UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request); assertEquals("bbadger", userDetails.getUsername()); assertEquals("Bucky Badger", userDetails.getFullName()); + assertEquals("Buckingham Badger", userDetails.getDisplayName()); assertTrue(userDetails.getUddsMembership().isEmpty()); } /** @@ -76,10 +80,12 @@ public class UWUserDetailsAuthenticationFilterTest { HttpServletRequest request = mock(HttpServletRequest.class); when(request.getHeader("uid")).thenReturn("bbadger"); - when(request.getHeader("cn")).thenReturn("Bucky Badger"); + when(request.getHeader("displayName")).thenReturn("Buckingham Badger"); + when(request.getHeader("cn")).thenReturn("Bucky Badger"); UWUserDetails userDetails = filter.getPreAuthenticatedPrincipal(request); assertEquals("bbadger", userDetails.getUsername()); - assertEquals("Bucky Badger", userDetails.getFullName()); + assertEquals("Bucky Badger", userDetails.getFullName()); + assertEquals("Buckingham Badger", userDetails.getDisplayName()); assertTrue(userDetails.getAuthorities().isEmpty()); } /** diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java index fc4a782..8963a04 100644 --- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java +++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/IdentifiersBuilderTest.java @@ -2,8 +2,8 @@ package edu.wisc.uwss.uds; import org.junit.Test; -import edu.wisc.services.uds.person.v1_1.Identifier; -import edu.wisc.services.uds.person.v1_1.Identifiers; +import edu.wisc.uds.person.Identifier; +import edu.wisc.uds.person.Identifiers; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; diff --git a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java index 9397790..c949209 100644 --- a/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java +++ b/uw-spring-security-core/src/test/java/edu/wisc/uwss/uds/UdsPersonUserDetailsImplTest.java @@ -9,11 +9,11 @@ import java.util.Collections; import org.junit.Test; -import edu.wisc.services.uds.person.v1_1.Demographic; -import edu.wisc.services.uds.person.v1_1.Identifier; -import edu.wisc.services.uds.person.v1_1.Identifiers; -import edu.wisc.services.uds.person.v1_1.Name; -import edu.wisc.services.uds.person.v1_1.Person; +import edu.wisc.uds.person.Demographic; +import edu.wisc.uds.person.Identifier; +import edu.wisc.uds.person.Identifiers; +import edu.wisc.uds.person.Name; +import edu.wisc.uds.person.Person; /** * Tests for {@link UdsPersonUserDetailsImpl} @@ -43,6 +43,7 @@ public class UdsPersonUserDetailsImplTest { assertNull(userDetails.getCustomLogoutUrl()); assertNull(userDetails.getEmailAddress()); assertNull(userDetails.getFullName()); + assertNull(userDetails.getDisplayName()); assertNull(userDetails.getPassword()); assertNull(userDetails.getPvi()); assertEquals(UdsPersonUserDetailsImpl.USER_DETAILS_SOURCE, userDetails.getSource()); @@ -138,5 +139,21 @@ public class UdsPersonUserDetailsImplTest { assertEquals(pvi, new UdsPersonUserDetailsImpl(person).getPvi()); } + /** + * Confirm successfully retrieve {@link UdsPersonUserDetailsImpl#getDisplayName()}, + * that it uses preferred name, and also overrides the given name. + */ + @Test + public void getDisplayName_control() { + Person person = new Person(); + Demographic demographic = new Demographic(); + Name name = new Name(); + name.setLast("Badger"); + name.setFirst("Bucky"); + name.setPreferredFirst("Buckingham"); + demographic.setName(name); + person.setDemographic(demographic); + assertEquals("Buckingham Badger", new UdsPersonUserDetailsImpl(person).getDisplayName()); + } } diff --git a/uw-spring-security-sample-war/pom.xml b/uw-spring-security-sample-war/pom.xml index 1acbabd..a2c3867 100644 --- a/uw-spring-security-sample-war/pom.xml +++ b/uw-spring-security-sample-war/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>edu.wisc.uwss</groupId> <artifactId>uw-spring-security</artifactId> - <version>1.7.1-SNAPSHOT</version> + <version>1.8.0-SNAPSHOT</version> </parent> <artifactId>uw-spring-security-sample-war</artifactId> <name>UW Spring Security Sample War</name> diff --git a/uw-spring-security-web/pom.xml b/uw-spring-security-web/pom.xml index b7cff5d..1061bfa 100644 --- a/uw-spring-security-web/pom.xml +++ b/uw-spring-security-web/pom.xml @@ -3,7 +3,7 @@ <parent> <groupId>edu.wisc.uwss</groupId> <artifactId>uw-spring-security</artifactId> - <version>1.7.1-SNAPSHOT</version> + <version>1.8.0-SNAPSHOT</version> </parent> <artifactId>uw-spring-security-web</artifactId> <name>UW Spring Security Web</name> diff --git a/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java b/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java index 665f5ba..bd4c9e1 100644 --- a/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java +++ b/uw-spring-security-web/src/main/java/edu/wisc/uwss/web/uwframe/UwframeSession.java @@ -60,7 +60,7 @@ public class UwframeSession { * @param userDetails */ public UwframeSession(Environment environment, UWUserDetails userDetails) { - this(environment, userDetails.getUsername(), userDetails.getFullName(), userDetails.getFirstName(), userDetails.getLastName()); + this(environment, userDetails.getUsername(), userDetails.getDisplayName(), userDetails.getFirstName(), userDetails.getLastName()); } /** * -- GitLab