# 用户配置文件
当 pac4j 成功认证用户时,将从认证提供者检索其数据,并构建用户配置文件。他的配置文件包括:
- 一个标识符 (getId())
- 属性(getAttributes()、getAttribute(name))
- 认证相关属性 (getAuthenticationAttributes()、getAuthenticationAttribute(name))
- 角色 (getRoles())
- 权限 (getPermissions())
- 客户端名称(getClientName())
- 记住我 (isRemembered())
- 一个关联标识符(getLinkedId())
事实上,配置文件层次结构的根类是 BasicUserProfile (opens new window)。它实现 UserProfile (opens new window) 接口。
这适用于需要最小用户配置文件的特定用例。
在 pac4j 环境中,必须考虑的第一个用户配置文件是 CommonProfile (opens new window),它定义了大多数配置文件中最常用的方法。
用户配置文件通过 配置文件管理器进行管理。
# 1)标识符
每个用户配置文件必须具有唯一标识符。因此,当构建用户配置文件时,pac4j 客户端使用一个值作为配置文件标识符,该值强制来自认证提供者的唯一性。
这在同一认证提供者提供的配置文件中运行良好,但在使用多个认证提供者时可能会出现问题。我们可能会在从认证提供者中选择的标识符之间发生冲突。为了避免这个问题,在配置文件标识符之前添加了一个“类型化标识符”来添加配置文件类名。
示例:
profile.getId() // 00001
profile.getTypedId() // org.pac4j.oauth.profile.facebook.FacebookProfile#00001
2
由于标识符必须是 String,因此可以使用 ProfileHelper.sanitizeIdentifier 方法转换其他 Java 类型并删除标识符的“类型化”部分。
# 2)属性
用户配置文件具有从认证提供者检索的数据(转换后)填充的属性。具有相同名称和集合类型值的多个属性可以(可选)合并为一个属性。特别是,它对于在不同的单个元素集合中返回角色的认证提供者非常有用。
# 3)认证相关属性
某些认证提供者将包含与认证本身相关的属性,例如认证方法、认证有效的时间段或认证提供者的元数据。这些属性与用户的属性分开存储。
# 4)角色和权限
可以通过 addRole(role)、addRoles(Roles)、addPermission(permission)和 addPermissions(permissions) 方法将角色和权限添加到用户配置文件中。
它们通常在 AuthorizationGenerator 中计算。
# 5)客户端名字
在登录过程中,客户端的名称通过 setClientName(name) 方法保存到用户配置文件中,稍后可以通过 getClientName() 方法检索。
# 6)记住我
用户配置文件可以定义为记住我,而不是通过 setRemembered(boolean) 方法进行完全认证。如果记住了用户配置文件,isRemembered() 方法将返回。
# 7) CommonProfile 的常用方法
 CommonProfile 有以下方法:
| 方法 | 类型 | 返回 | 
|---|---|---|
| getEmail() | String | email属性 | 
| getFirstName() | String | first_name属性 | 
| getFamilyName() | String | family_name属性 | 
| getDisplayName() | String | display_name属性 | 
| getUsername() | String | username属性 | 
| getGender() | Gender | gender属性 | 
| getLocale() | Locale | locale属性 | 
| getPictureUrl() | URI | picture_url属性 | 
| getProfileUrl() | URI | profile_url属性 | 
| getLocation() | String | location属性 | 
| asPrincipal() | Principal | 包含当前认证用户的名字的一个对象 | 
| isExpired() | boolean | 如果当前配置文件过期,为 false | 
# 8)数据定义
配置文件类和属性是通过 ProfileDefinition (opens new window) 实现定义的。
setProfileFactory 方法允许你定义要为用户配置文件返回的实例类,而 primary 和 secondary 方法允许你使用其特定的转换器定义属性。
许多属性转换器已经存在:BooleanConverter (opens new window)、ColorConverter (opens new window) ……请查看 org.pc4j.core.profile.converter (opens new window) 包。
因此,newProfile 方法返回一个新的类实例,而 convertAndAdd 方法会转换属性(如果有关联的转换器)并将其添加到配置文件中。
如果将 typedId 指定为第一个参数,并且已调用 setRestoreProfileFromTypedId(true) 方法,则 newProfile 方法还可以返回 typedId 的相关配置文件。
# 9)数据结构
事实上,大多数客户端都不会返回 CommonProfile,但会返回特定的配置文件,如 FacebookProfile、OidcProfile ……
- (部分)使用特定实现覆盖 CommonProfile的通用方法
- 为其特定属性添加特定的 getter。
# 10)关联标识符
每个用户配置文件可能有一个关联标识符,它是另一个用户配置文件的标识符。这样,两个用户配置文件都被关联起来,它允许你通过用户的帐户进行认证,并加载在第一个用户中定义的关联用户,特别是通过使用 LoadLinkedUserAuthorizationGenerator (opens new window)。
