跟着JHipster学做项目 (4)审计功能

16 篇文章 1 订阅
5 篇文章 0 订阅

JHipster的基础应用里实现了对用户登录的审计功能,该功能可以控制用户密码输入错误次数。此外,通过扩展模块实现了实体审计功能。

实体的审计功能分两个方面:

  1. 在对实体进行创建或者修改时,自动添加用户和更改日期等信息。
  2. 在对实体进行创建或者修改时,系统自动记录每次更改的内容,相当于对实体实现版本记录功能。

下面来分别看一下JHipster的具体实现方式。

用户登录审计功能:

创建自定义repository来实现AuditEventRepository,如下所示:

@Repository
public class CustomAuditEventRepository implements AuditEventRepository {

    @Override
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void add(AuditEvent event) {
        if (!AUTHORIZATION_FAILURE.equals(event.getType()) &&
            !Constants.ANONYMOUS_USER.equals(event.getPrincipal())) {

            PersistentAuditEvent persistentAuditEvent = new PersistentAuditEvent();
            persistentAuditEvent.setPrincipal(event.getPrincipal());
            persistentAuditEvent.setAuditEventType(event.getType());
            persistentAuditEvent.setAuditEventDate(event.getTimestamp());
            Map<String, String> eventData = auditEventConverter.convertDataToStrings(event.getData());
            persistentAuditEvent.setData(truncate(eventData));
            persistenceAuditEventRepository.save(persistentAuditEvent);
        }
    }
}

当用户登录成功或失败后,系统会记录如下信息:

登录信息

 

实体审计功能(一)添加用户和日期信息

可以分为三步走,第一步添加类实现AuditorAware,用以获取用户信息,如下:

@Component
public class SpringSecurityAuditorAware implements AuditorAware<String> {

    @Override
    public Optional<String> getCurrentAuditor() {
        return Optional.of(SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT));
    }
}

第二步创建抽象类,利用@CreatedBy等注解让spring boot自动添加用户和日期等信息,如下:

public abstract class AbstractAuditingEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @CreatedBy
    @Field("created_by")
    @JsonIgnore
    @DiffIgnore
    private String createdBy;

    @CreatedDate
    @Field("created_date")
    @JsonIgnore
    @DiffIgnore
    private Instant createdDate = Instant.now();

    @LastModifiedBy
    @Field("last_modified_by")
    @JsonIgnore
    @DiffIgnore
    private String lastModifiedBy;

    @LastModifiedDate
    @Field("last_modified_date")
    @JsonIgnore
    @DiffIgnore
    private Instant lastModifiedDate = Instant.now();

}

第三步使实体类继承上面创建的抽象类。

@Document(collection = "author")
public class Author extends AbstractAuditingEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    private String id;

    @Field("name")
    private String name;

    @Field("birth_date")
    private LocalDate birthDate;

}

完成以上动作,在数据库中的记录如下:

author

实体审计功能(二)实体的版本记录

该功能的实现,可以提供实体的被改变的信息记录,更改前的值,何时何人更改。JHipster主要通过依赖JaVers来实现,具体操作如下。

首先,在pom.xml中引入依赖

        <dependency>
            <groupId>org.javers</groupId>
            <artifactId>javers-spring-boot-starter-mongo</artifactId>
            <version>5.8.8</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>3.4.2</version>
        </dependency>

其次创建类来实现AuthorProvider,提供操作用户信息。

@Component
public class JaversAuthorProvider implements AuthorProvider {

   @Override
   public String provide() {
       return SecurityUtils.getCurrentUserLogin().orElse(Constants.SYSTEM_ACCOUNT);
   }
}

最后在需要进行版本控制的实体对应repository添加注解@JaversSpringDataAuditable

import com.mycompany.myapp.domain.Author;
import org.javers.spring.annotation.JaversSpringDataAuditable;

import org.springframework.data.mongodb.repository.Query;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;

/**
 * Spring Data MongoDB repository for the Author entity.
 */
@SuppressWarnings("unused")
@Repository
@JaversSpringDataAuditable
public interface AuthorRepository extends MongoRepository<Author, String> {
}

完成以上配置后,每当创建一个新的实体或修改实体,系统会自动记录所有过程,数据库记录如下图所示:

sanpshot

JHipster的Audit Log页面如下图所示:

entity

Good Luck,

Cheers!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
JHipster是一个用于生成现代化的Web应用程序的开发平台,它基于Spring Boot和Angular等技术栈。在JHipster中,项目管理权限可以通过以下几种方式进行管理: 1. 用户角色:JHipster支持基于角色的访问控制。您可以定义不同的用户角色,并为每个角色分配不同的权限。例如,您可以创建一个"管理员"角色,拥有完整的项目管理权限,以及一个"普通用户"角色,只有受限的项目访问权限。 2. Spring Security:JHipster集成了Spring Security框架,它提供了一套强大的身份验证和授权机制。您可以使用Spring Security的注解和配置来保护您的API端点和页面,并限制用户对项目资源的访问。 3. 权限注解:通过在JHipster生成的代码中使用特定的注解,您可以限制特定功能或方法的访问权限。例如,@Secured注解可以用于控制对某个方法的访问权限,只有具有相应角色的用户才能调用该方法。 4. 项目设置:JHipster还提供了一些项目级别的配置选项,例如启用/禁用某些功能或插件。通过调整这些设置,您可以对项目中的特定功能进行管理,并限制不同用户的权限。 需要注意的是,JHipster并没有提供一个完整的用户和权限管理系统,它更多地关注于生成项目的初始代码结构和一些基本的安全配置。如果您的项目需要更复杂的权限管理功能,您可能需要在JHipster的基础上进行扩展或集成其他权限管理解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值