diff --git a/README.md b/README.md index 67e01f8fbf5c31d431b27ff0a483c79fea9aebdc..418c7bb926f80e1f549415a6c28838ba184f2506 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 d88cecb56408bcab42a5b76414a35286a1c7aaae..b6ffba44adee4ee79d2a3560b3ba8227893d67f4 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 bebbdf2853c5b67874df00e813ddf8a101e9faa5..1a97f83e105f07c18ac6f70a911d4525c5a58e3b 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 9d0eae9645f0c3a6a6562c7cceeb9e75bdd442dc..a5665dc122a64206fe2f35201a29ef4a4293b060 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 01a792994658c74821fb6e774e3dae563c74d43d..ab0c2022f2ec257c8225c4cc96d16cf17ce88830 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 d0e6954bf82b420570ade3498ebe3dc244588373..2c63fc665f2f5d1fecce4b03471833b3d9ac77b6 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 00ed3537d96b8bd2e8df0be9a2d728aad0f6b52a..6fdd401928c3668ebc71c9574e613327df0370c2 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 a499be1f21ce3247f6ce693091b906f9d5cb3dca..66e6d903aedff90310c2c9f92c70222fae727194 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 5f49a42c5fb9785904ef1177a7af7b706f5034f9..ef6a2f314f6facc910f55f48ec8068035983910b 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 d015c2ab0f100d77cf52ebc2bb3b9553d294583a..921aede6fe2f1f77490483634f10913e903ed1bb 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 d09a0ccf24a9377c8b0f73cf981480fab175efb1..65f60dcc4201977ce6d9d7b1c22c94b115b46a5f 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 da5aa1b30d06489bbbd78c66a08bfdd95c202494..41814c3b730d3daaa9c74a09180b57b1476de31e 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 1b152ec735211a4db8a8ea4245fb02428b08cb18..5934c39c69439dbee2743bff4b385b4fafbc317b 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 9f71f6a1689acb762ef29cc4462590cd5de57c98..9a11b70b51b4de7e5bab4f1c7844b8c49b4ec832 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 08aa10d075b1e826bd36c1e31391f0509cb9fe29..1ff6f2bf1652b77391b1eeddb3e78b46decdb366 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 324dbd62b36d611007b61fd30bebcab4565e3aac..5ce695073521fe312539b21572c67c449644afac 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 fc4a782707a8a2b38ae1d7f8d407cccaaf2a0f3c..8963a04ee11661e1d49ba48cc329affdc61af0be 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 9397790a0aa4263628e8cc56a7a48aa6a091a094..c949209aa6642bc8ff3361f482b475c29e5145a2 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 1acbabda22592cfb2ffcde828c5885d530ce9ca0..a2c38676d89b960b068be6eaf7ff6016b975c17f 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 b7cff5dd26cc5577855d1f283a1ad5c9e9ca5f5d..1061bfa5e7dce7ce198f6938fa952a1a47fff74b 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 665f5bacbd4f9783f0d761821c27601a92a715b6..bd4c9e171ac60808f6e2d23230338416d6beff55 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()); } /** *