LoginSignup
7
11

More than 5 years have passed since last update.

Spring Data JPA で監査情報を記録

Last updated at Posted at 2016-12-26

はじめに

Spring Data JPA で、監査情報を自動付与してみます。
監査情報とは「いつ」「だれが」データを登録したかの情報で、この情報があると、サービス運用時のトラブル対応時に役立ちます。
本当は Spring の主要機能の一つである AOP を学習するための題材として考えていたのですが、意外な落とし穴がありました。。

監査情報の記録方法

アノテーションを設定

なんと便利なことに、監査情報を付与するアノテーションがありました。いちいち AOP を実装する必要がないのです!
こんな感じで大丈夫です。

@CreatedBy
private Long createMemberId;

@CreatedDate
private Date createDate;

@LastModifiedBy
private Long modifyMemberId;

@LastModifiedDate
private Date modifyDate;

登録者/更新者情報

以前の投稿で認証機能を実装してみましたが、今回は 操作者には認証情報のIDを設定することにします。

こんな感じで設定します。

JpaConfig.java
@EnableJpaAuditing
@Configuration
public class JpaConfig
{
    @Bean
    public AuditorAware<Long> auditorAware()
    {
        return new SecurityAuditor();
    }

    public static class SecurityAuditor implements AuditorAware<Long>
    {
        @Override
        public Long getCurrentAuditor()
        {
            Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
            if (authentication == null || !authentication.isAuthenticated())
            {
                return null;
            }
            MemberEntity memberEntity = (MemberEntity) authentication.getPrincipal();

            return memberEntity.getId();
        }
    }
}

エンティティの共通部分を別クラスにまとめる

エンティティごとに監査情報用の項目を定義するのは面倒なので、親クラスでまとめて定義することにします。
省略してますが、必要に応じて、setter/getter も実装してください。
ポイントは、MappedSuperclass アノテーションをつけることです。

BaseEntity.java
@MappedSuperclass
public class BaseEntity
{
    @CreatedBy
    private Long createMemberId;

    @CreatedDate
    private Date createDate;

    @LastModifiedBy
    private Long modifyMemberId;

    @LastModifiedDate
    private Date modifyDate;
}

終わりに

Spring 便利ですね。
機能豊富で開発が簡略化できる仕組みがたくさんそろってるけど、なかなか追いつけないのが悩みの種です。

参考

7
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
11