java - 我如何使用 ldap 和 spring security 获取登录用户的电子邮件

标签 java spring spring-security ldap

嘿,我想要成功连接到 ldap 服务器,并使用用户名和密码登录,但之后我想获取登录用户的电子邮件,我该怎么做?

@Controller
public class DemoController{    
public MutationServices ms = new MutationServices();
@RequestMapping("login")
public String logout (ModelMap model){
    return "/login";
}

@RequestMapping("uploadFile")
public String uploadPage(ModelMap model){
    return "/upload";
}

@RequestMapping("utilisateurs")
public String getSimpleUserPage(ModelMap model){

Authenticationauth=SecurityContextHolder.getContext().getAuthentication();
    String username = auth.getName();

    @SuppressWarnings("unchecked")
    Collection<SimpleGrantedAuthority> authorities 
       (Collection<SimpleGrantedAuthority>) auth.getAuthorities();
    System.out.println("auth : " + authorities);
    model.addAttribute("username", username);
    return "/user";
}}

这是我的 spring 安全

<http>
    <form-login login-page="/login"
        authentication-failure-url="/login"
    />

    <intercept-url pattern="/utilisateurs**" access="ROLE_USERS" />
    <logout logout-success-url="/index.jsp" />

    <http-basic />
</http>
<authentication-manager>
    <ldap-authentication-provider
        user-search-filter="(cn={0})" 
        user-search-base="dc=example,dc=com"
        group-search-filter="(member={0})"
        group-search-base="dc=example,dc=com"
        group-role-attribute="cn" 
        role-prefix="ROLE_">

    </ldap-authentication-provider>
</authentication-manager>

<ldap-server url="ldap://0.0.0.0:10389"
     manager-dn="uid=admin,dc=example,dc=com"  manager-password="admin"/>

最佳答案

假设您使用 inetOrgPerson LDAP 架构。

为此 LDAP 模式定义 bean,这将在登录时检索电子邮件:

@Bean
public InetOrgPersonContextMapper userContextMapper() {
    return new InetOrgPersonContextMapper();
}

将 bean 引用添加到 LDAP 配置:

<ldap-authentication-provider
    user-search-filter="(cn={0})" 
    user-search-base="dc=example,dc=com"
    group-search-filter="(member={0})"
    group-search-base="dc=example,dc=com"
    group-role-attribute="cn" 
    role-prefix="ROLE_"
    user-context-mapper-ref="userContextMapper">

然后您可以像这样检索电子邮件:

 Authentication auth = SecurityContextHolder.getContext().getAuthentication();
 InetOrgPerson person = (InetOrgPerson)auth.getPrincipal();
 String email = person.getMail();

关于java - 我如何使用 ldap 和 spring security 获取登录用户的电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43607674/

相关文章:

grails - Grails-Spring Security ldap事件目录身份验证-错误的凭证错误

java - Banach 分形曲线 Java - 递归

java - 日期对话框在涉及 12 月时强制关闭

java - 如何通过插件获取当前分支名称

java - Spring 4 中的错误 | java.lang.ClassNotFoundException : org. springframework.web.servlet.DispatcherServlet

java - Spring Boot + Liquibase - 自定义 LockService 类

java - Spring boot @Value 不适用于静态字段

java - jsoup 从表中提取数据

java - Spring OAuth2 自定义授权类型 Autowiring 类返回 null

java - 添加 DELETE 端点时,由于 Spring MVC 中的 MIME 类型,资源被阻止