UserInfo.kt
package io.github.lishangbu.avalon.oauth2.common.userdetails
import org.springframework.security.core.GrantedAuthority
import org.springframework.security.core.userdetails.User
import org.springframework.security.oauth2.core.OAuth2AuthenticatedPrincipal
/**
* OAuth2 用户信息对象
*
* 基于 Spring Security 的 [User] 扩展附加属性,便于在令牌相关接口中返回更多用户信息
*
* @author lishangbu
* @since 2025/8/9
*/
@Suppress("removal")
class UserInfo :
User,
OAuth2AuthenticatedPrincipal {
/** 附加属性 */
val additionalParameters: MutableMap<String, Any> = HashMap()
constructor(
username: String,
password: String?,
authorities: Collection<GrantedAuthority>,
) : super(username, password, authorities)
constructor(
username: String,
password: String?,
enabled: Boolean,
accountNonExpired: Boolean,
credentialsNonExpired: Boolean,
accountNonLocked: Boolean,
authorities: Collection<GrantedAuthority>,
) : super(
username,
password,
enabled,
accountNonExpired,
credentialsNonExpired,
accountNonLocked,
authorities,
)
/** 返回附加属性映射 */
override fun getAttributes(): MutableMap<String, Any> = additionalParameters
/** 返回主体名称 */
override fun getName(): String = username
/** 返回对象的字符串表示 */
override fun toString(): String =
javaClass.name +
" [" +
"Username=" +
username +
", " +
"Enabled=" +
isEnabled +
", " +
"AdditionalParameters" +
additionalParameters +
"AccountNonExpired=" +
isAccountNonExpired +
", " +
"CredentialsNonExpired=" +
isCredentialsNonExpired +
", " +
"AccountNonLocked=" +
isAccountNonLocked +
", " +
"Granted Authorities=" +
authorities +
"]"
companion object {
/** 序列化版本号 */
private const val serialVersionUID = 1L
}
}