データ]


1前書き

この記事では、

Spring Data LDAPの統合と構成に焦点を当てます

Spring LDAPのステップバイステップの紹介については、

この記事

をご覧ください。

また、Spring Data JPAガイドリンクの概要を見ることもできます:/永続データレイヤ付きのspring-data-jpa[ここ]。


2.


Maven


依存関係

必要なMavenの依存関係を追加することから始めましょう。

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-ldap</artifactId>
    <version>1.0.6.RELEASE</version>
</dependency>


3ドメインエントリ

Spring LDAPプロジェクトはhttp://docs.spring.io/spring-ldap/docs/current-SNAPSHOT/reference/#odm[Object-Directory Mapping(ODM)]を使用してLDAPエントリをJavaオブジェクトにマッピングする機能を提供します。

リンクで設定済みのLDAPディレクトリのマッピングに使用されるエンティティを定義しましょう:/spring-ldap[Spring LDAP article]

@Entry(
  base = "ou=users",
  objectClasses = { "person", "inetOrgPerson", "top" })
public class User {
    @Id
    private Name id;

    private @Attribute(name = "cn") String username;
    private @Attribute(name = "sn") String password;

   //standard getters/setters
}


@ Entry

は、どのエンティティをLDAPエントリのディレクトリルートにマップするかを指定するために使用される

@ Entity

(JPA/ORMの)に似ています。


Entry

クラスは、エンティティ

DN

を表すjavax

__。naming.Name


型のフィールドに、@ @ Id

アノテーションを宣言する必要があります。

@ Attribute

アノテーションは、オブジェクトクラスフィールドをエンティティフィールドにマッピングするために使用されます。


4 Spring Data Repository

Spring Data Repositoryは、さまざまな永続ストア用のデータアクセスレイヤの実装をすぐに使える、すぐに使える基本的な機能を提供する抽象概念です。

Spring Frameworkは、データリポジトリ内の特定のクラスに対して、CRUD操作の実装を内部で提供しています。完全な詳細は

Spring Data JPAの紹介

の記事にあります。

Spring Data LDAPは、__https://docs.spring.io/spring-data/commons/docs/current/api/org/springframework/data/repository/CrudRepository.htmlの自動実装を提供する同様の抽象化を提供します。それはLDAPディレクトリのための基本的なCRUD操作を含みます。

また、Spring Data Frameworkは、メソッド名に基づいて、次のリンクを作成することもできます。/永続データレイヤ – スプリングデータ – jpa#customquery[カスタムクエリ]

__User Entryの管理に使用されるリポジトリインターフェイスを定義しましょう。

@Repository
public interface UserRepository extends LdapRepository<User> {
    User findByUsername(String username);
    User findByUsernameAndPassword(String username, String password);
    List<User> findByUsernameLikeIgnoreCase(String username);
}

ご覧のとおり、エントリ

Userの

LdapRepository

を拡張することでインターフェイスを宣言しました。Spring Data Frameworkは、

find()



findAll()



save()、


delete()、__などの基本的なCRUDメソッド実装を自動的に提供します。等

また、いくつかのカスタムメソッドを宣言しました。 Spring Data Frameworkはhttps://docs.spring.io/spring-data/data-commons/docs/1.6.1.RELEASE/reference/html/repositories.htmlとして知られている方法でメソッド名を調べることによって実装を提供します。 #repositories.query-methods.query-creation[クエリービルダーの仕組み]。


5構成

Javaベースの

@ Configuration

クラスまたはXML名前空間を使用してSpring Data LDAPを設定できます。 Javaベースのアプローチを使用してリポジトリを設定しましょう。

@Configuration
@EnableLdapRepositories(basePackages = "com.baeldung.ldap.** ** ")
public class AppConfig {
}


@ EnableLdapRepositories

ヒント

@Repository.

としてマークされたインタフェースについて、与えられたパッケージをスキャンするようにSpring


6. ビジネスの論理

LDAPディレクトリを操作するために

UserRepository

を使用するサービスクラスを定義しましょう。

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

   //business methods
}

それでは、一度に1つのアクションを調べて、Spring Data Repositoryを使用してこれらのアクションをいかに簡単に実行できるかを確認します。


6.1. ユーザ認証

既存のユーザーを認証するための簡単なロジックを実装しましょう。

public Boolean authenticate(String u, String p) {
    return userRepository.findByUsernameAndPassword(u, p) != null;
}


6.2. ユーザー作成

次に、新しいユーザーを作成し、パスワードのハッシュを保存しましょう。

public void create(String username, String password) {
    User newUser = new User(username,digestSHA(password));
    newUser.setId(LdapUtils.emptyLdapName());
    userRepository.save(newUser);
}


6.3. ユーザー変更

次の方法で既存のユーザーまたはエントリを修正できます。

public void modify(String u, String p) {
    User user = userRepository.findByUsername(u);
    user.setPassword(p);
    userRepository.save(user);
}


6.4. ユーザー検索

カスタムメソッドを使用して既存のユーザーを検索できます。

public List<String> search(String u) {
    List<User> userList = userRepository
      .findByUsernameLikeIgnoreCase(u);

    if (userList == null) {
        return Collections.emptyList();
    }

    return userList.stream()
      .map(User::getUsername)
      .collect(Collectors.toList());
}


7. 動作例

最後に、簡単な認証シナリオをすばやくテストできます。

@Test
public void givenLdapClient__whenCorrectCredentials__thenSuccessfulLogin() {
    Boolean isValid = userService.authenticate(USER3, USER3__PWD);

    assertEquals(true, isValid);
}


8結論

このクイックチュートリアルでは、Spring LDAPリポジトリ設定とCRUD操作の基本を説明しました。

この記事で使われている例はhttps://github.com/eugenp/tutorials/tree/master/spring-ldap[GitHubに載っています]。