Os dados da primavera fornecem suporte para auditoria: ou seja, quando a entidade é criada ou modificada. Os dados da primavera fornecem a adição de @createdby, @lastmodifiedby, @createddate, @lastmodifieddate anotações para as propriedades da classe de entidade e configurar os itens de configuração correspondentes para realizar a função de auditoria. O sistema registra automaticamente os valores das quatro propriedades do criado por criado por último, por último, por último. A seguir, são apresentados os itens de configuração específicos.
Exemplo
Crie uma aula de entidade
pacote com.hfcsbc.infrastructureservice.Domain; import com.hfcsbc.repository.support.domain.abstractAuditingEntity; importar lombok.data; importação org.springframework.data.annotation.annatedby; org.springframework.data.annotation.lastmodifiedby; importar org.springframework.data.annotation.lastmodifieddate; importar org.springframework.data.jpa.Domain.support.auditionEntityListener; import.mers *s* Pengchao em 2018/3/7 */@entity@data@entityListeners ({auditingEntityListener.class}) public class Pessoa {@id @generatedValue Private Long Id; nome de string privado; idade inteira privada; @Createdby @column (name = "criate_by", nullable = false, comprimento = 50, update = false) private string criado por @CreatedDate @Column (name = "CreateD_Date", Nullable = false, update = false) Data privada criadaDate = new Date (); @LastModifiedBy @column (name = "last_modiFied_by", comprimento = 50) String privada lastModifiedBy; @LastModifiedDate @column (name = "last_modiFied_date") data privada lastModifiedDate = new Date ();}Crie o repositório correspondente
pacote com.hfcsbc.repository; importação com.hfcsbc.domain.person; importar org.springframework.data.jpa.repository.jparepository;/** * Criar por Pengchao em 2018/3/7 */interface pública »»
Configure feijão para obter informações do usuário
pacote com.hfcsbc.infrastructureservice.config; importar org.springframework.data.domain.auditorAware; importar org.springframework.security.core.authentication; org.springframework.stereotype.Component;import java.util.Optional;/** * Create by pengchao on 2018/3/7 */@Component("auditorAware")public class AuditorAwareImpl implements AuditorAware<String> { @Override public Optional<String> getCurrentAuditor() { Authentication authentication = SecurityContextholder.getContext (). GetAuthentication (); return opcional.of (autenticação.getPrincipal (). tostring ()); }}Ligue a função de auditoria na aula de entrada de inicialização da primavera
pacote com.hfcsbc.infrastructureservice; importar org.springframework.boot.springApplication; importar org.springframework.boot.autoconfigure.springbootapplication; importância org.springframework.data.itá.reauApplication; org.springframework.scheduling.annotation.enableasync;@springbootApplication@enablejpauditing (auditorawareref = "auditorAWare")@Enableasyncpublic Classpplication (public static void main (string [] args) {springAppLication.runnication (public static void main (string [] args) {springApplication.Runation (público. }}Ou seja, a configuração é concluída. Ao salvar objetos usando o repositório, criou o criado por LastModifiedByBy LastModifiedDate possui uma função de auditoria para inseri -lo automaticamente.
Nota: Como obter informações do usuário no método assíncrono
Como você usa o repositório para salvar objetos em um método assíncrono, você não pode obter informações do usuário do usuário. Você precisa adicionar os seguintes itens de configuração para obter informações do usuário em autenticação
pacote com.hfcsbc.config; importar org.springframework.beans.factory.config.methodinvingFactoryBean; importar org.springframework.context.annotation.bean; importar org.springframework.Context.annotation.Conotation.Bean; org.springframework.security.core.context.SecurityContexTholder;/** * Crie por Pengchao em 2018/3/7 */ @ConfigurationPublic Classe AuditorAWARECONFIG {@Bean Public MethodinvingFactoryBeanEanVingingBeationBeanBeanBeanFig {@Bean Public MetodininvingBeanEanNVINGINCIOLBEANBean () {MethodinEnginEnTeating MethodinVingEaningBakingBakingBeanBeanBonfig {@Bean Public MetodinvingBeanEannvingBeationBean () {MethodinEnTeation MethodInvingFactoryBean (); MethodInvingFactoryBean.SetTargetClass (SecurityContexTholder.class); MethodInvingFactoryBean.SetTargetMethod ("SetStrategyName"); MethodInvingFactoryBean.SetArguments (new String [] {SecurityContextholder.mode_ineritableThreadLocal}); Retornar MethodInvingFactoryBean; }}A principal função do SecurityContextholder é associar o processo atualmente executado ao SecurityContext.
SecurityContextholder.mode_ineritableThreadLocal: Usado no caso em que os threads têm relacionamentos pai-filho, o encadeamento filho integra o SecurityContexholder do thread pai;
SecurityContextholder.mode_ineritableThreadLocal: Compartilhe globalmente SecurityContextholder.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.