gpt4 book ai didi

spring-boot - Thymeleaf - 获取经过身份验证的用户的全名

转载 作者:行者123 更新时间:2023-12-05 05:05:47 24 4
gpt4 key购买 nike

根据 thymeleaf 安全性 page我可以获得如下记录的用户名和角色:

Logged user: <span sec:authentication="name">Bob</span>
Roles: <span sec:authentication="principal.authorities">[ROLE_USER, ROLE_ADMIN]</span>

我有一个 Web 应用程序,其中使用 ActiveDirectoryLdapAuthenticationProvider 通过事件目录完成身份验证如下:

@Bean
@Override
public AuthenticationManager authenticationManager() {
return new ProviderManager(Arrays.asList(activeDirectoryLdapAuthenticationProvider()));
}

@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(adDomain,
adUrl);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);

return provider;
}

然后在用户登录后,我有一个标题页,我在所有页面中都使用上面的 sec:authentication="name" thymeleaf 标签来显示用户名,但我想看看是否有办法显示全名。

建议的解决方案here对我不起作用:

我正在使用:thymeleaf-extras-springsecurity5

并使用:<span th:text ="${#authentication.getPrincipal().getUser().getFirstName()}"></span>

给我:Method getUser() cannot be found on type org.springframework.security.ldap.userdetails.LdapUserDetailsImpl

似乎此信息来自:org.springframework.security.ldap.userdetails.LdapUserDetailsImpl只有几个选项,比如用户名,但没有 AD 可以拥有的其他信息。

最佳答案

我是这样解决问题的:

首先

我使用 org.springframework.security.ldap.userdetails.InetOrgPersonContextMapper 向提供者添加了一个 UserDetailsContextMapper,如下所示:

@Bean
public AuthenticationProvider activeDirectoryLdapAuthenticationProvider() {
ActiveDirectoryLdapAuthenticationProvider provider = new ActiveDirectoryLdapAuthenticationProvider(adDomain, adUrl);
provider.setConvertSubErrorCodesToExceptions(true);
provider.setUseAuthenticationRequestCredentials(true);
provider.setUserDetailsContextMapper(userDetailsContextMapper()); <---

return provider;
}

@Bean
public UserDetailsContextMapper userDetailsContextMapper() {
return new LdapUserDetailsMapper() {
@Override
public UserDetails mapUserFromContext(DirContextOperations ctx, String username, Collection<? extends GrantedAuthority> authorities) {
InetOrgPersonContextMapper personContextMapper = new InetOrgPersonContextMapper();
return personContextMapper.mapUserFromContext(ctx, username, authorities);
}
};
}

第二

然后在我的标题页中添加:

<span th:text ="${#authentication.getPrincipal().getDisplayName()}"></span>

显示全名。

通过这种方法,您还可以访问显示所有其他 AD 相关字段,例如:

<span th:text ="${#authentication.getPrincipal().getMail()}"></span>
<span th:text ="${#authentication.getPrincipal().getTelephoneNumber()}"></span>
<span th:text ="${#authentication.getPrincipal().getRoomNumber()}"></span>

关于spring-boot - Thymeleaf - 获取经过身份验证的用户的全名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60304286/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com