当前位置: 首页 > 知识库问答 >
问题:

百里香叶-获取认证用户的全名

殳越
2023-03-14

根据thymeleaf安全页面,我可以获取记录的用户名和角色,如下所示:

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

我有一个Web应用程序,其中身份验证是使用活动目录Ldap身份验证提供程序通过活动目录完成的,如下所示:

@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标签来显示用户名,但我想看看是否有办法显示全名。

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

我正在使用:百里叶-额外-Spring安全5

和使用:<代码>

在类型org . spring framework . security . LDAP . user details . ldapuserdetailsimple上找不到< code >方法getUser()

似乎这些信息来自:组织.Spring框架.安全.ldap.用户详细信息.Ldap用户详细信息,只有几个选项,如用户名,但不是AD可以拥有的其余信息。

共有1个答案

姬承教
2023-03-14

我是这样解决问题的:

第一

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

@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>
 类似资料:
  • 我不明白,如果html模板与我在ModelAndView中获得的属性链接,如何将RESTFull服务的@Controller更改为@RestController 在胸腺叶模板中 但我想进入索引页面,在后台获取用户名 我可以使用ajax来更新标记“p”,但这样使用thymeleaf并没有什么好处,我可以使用jsp。那么,在Rest时使用thymeleaf的最佳方式是什么?它是否合理?

  • 我用百里香模板发送电子邮件。我有一个模板,比如: 如果为空或,我不想发送电子邮件。我可以设置任何Thymeleaf属性来生成错误并且不会发送邮件吗?因为在没有值的电子邮件中发送“My name is”没有任何意义。 我从Thymeleaf上下文中获取所有值,变量可能是不同类型的,例如、等。我也尝试了以下方法,但它并没有解决我的问题,因为对象总是可用的:

  • 我是Springboot的初学者,所以决定在购物车上工作。似乎找不到org.springframework.expression.spel.SpelEvalue ationException: EL1007E的根:在null上找不到属性或字段'name'。嵌套异常是org.thymeleaf.exceptions.TemplateProcessingException: Exception评估Sp

  • 您好,我是spring新手,我正试图用thymeleaf显示一个简单的html文件,但在呈现视图时遇到了问题。它只显示字符串“index”,而不显示index中的html内容。html。有人能告诉我我做错了什么吗 调度员servle。xml文件: TestController.java: 指数html文件:在webapp/templates/index中定义。html

  • 我想在胸腺方言中使用胸腺方言,但不能。我尝试过这个,但效果不佳: of删除里面的所有内容。我想在渲染后得到这样的东西: 那么,我该如何实现我的目标呢?

  • 我有一个,它传递给了一个Thymeleaf页面。我把这张地图放在页面上,我可以访问它。 如何使用thymeleaf执行?我只需要获取基于某个键的值,然后解析并打印该值,我知道该值并具有逻辑。 我正在运行一个Broadleaf应用程序,而Thymeleaf是它的UI引擎。