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

如何使用ldap和spring security从登录用户那里获得电子邮件

顾鸣
2023-03-14
@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";
}}
<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"/>

共有1个答案

欧阳衡
2023-03-14

假设您使用inetorgPersonLDAP模式。

为此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();
 类似资料:
  • 我已经实现了登录用户名或电子邮件在我现有的项目和工程罚款。我想将其扩展为使用用户名、电子邮件或电话登录。我想要一个用户登录用户名,电子邮件或电话号码和密码。 这是我的代码App\Http\Controllers\Auth\LoginController 应用程序\Http\控制器\Auth\注册控制器 注册工作正常,我可以将用户电话存储到用户表中。我已将电子邮件的输入类型更改为views/auth

  • 问题内容: 我希望django通过电子邮件而非用户名对用户进行身份验证。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个,所以我不能有一个。 另一个原因是所有电子邮件都是唯一的,但有时用户名已被使用。因此,我将自动创建用户名为。 我该如何更改才能让Django通过电子邮件进行身份验证? 这就是我创建用户的方式。 这就是我的登录方式。 除了先获取用户名外,登录还有其他方法吗?

  • 我希望django通过电子邮件而不是用户名来验证用户。一种方法是提供电子邮件值作为用户名值,但我不希望这样。原因是,我有一个url

  • 我希望身份验证组件允许用户登录输入用户名或电子邮件。在我的用户表中,两个字段-userName和userEmail都是唯一的。注册时,密码生成如下: sha1($username.$password); 问题是用户无法使用电子邮件登录。 应用程序控制器 用户控制器:登录功能如下: Auth。php:(我在这里对生成密码的方式做了一些更改,因为我正在使用cakephp会话自动登录到SMF论坛。) 我

  • 我正试图用tweepy从特定用户那里获得流行的推文。我需要twitter API中的result_type='popular'之类的东西(https://dev.twitter.com/rest/reference/get/search/tweets). 我该怎么做呢?

  • 目前,我正在使用以下内容将用户登录到我的应用程序中。然而,我想使用一个角函数来实际执行登录。为此,我想创建一个Rest网络服务来进行身份验证,但是我在SO上看到的所有示例都使用我认为被贬低的用户。我还希望该服务返回有关用户的信息。 我要问的是如何将MyUserDetailsService更改为用作登录的restful服务,或者如何创建一个可用于登录的服务,该服务将在登录后返回用户对象。 这是我的a