首页 > 其他分享 >spring data r2dbc 通过 Entity Callbacks 来实现密码加密功能

spring data r2dbc 通过 Entity Callbacks 来实现密码加密功能

时间:2023-01-18 02:11:13浏览次数:64  
标签:r2dbc spring springframework Entity passwordEncoder org import data

不使用使用 Entity Callbacks实现密码在保存时密码加密功能

 @Autowired
 PasswordEncoder passwordEncoder;

public Mono<ServerResponse> save(ServerRequest request){
       return request.bodyToMono(Doctor.class)
               .map(d -> {
                   d.setIsVerified(false);
                   d.setPassword(passwordEncoder.encode(d.getPassword()));
                   return d;
               })
               .flatMap(doctor -> doctorService.saveDoctor(doctor))
               .flatMap(d -> ServerResponse.created(URI.create("/doctors/" + d.getId())).bodyValue(d));
}

使用 Entity Callbacks功能实现密码加密

  • 定义一个回调类实现BeforeSaveCallback
import com.fengyun.medical.domain.Doctor;
import org.reactivestreams.Publisher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.r2dbc.mapping.OutboundRow;
import org.springframework.data.r2dbc.mapping.event.BeforeSaveCallback;
import org.springframework.data.relational.core.sql.SqlIdentifier;
import org.springframework.r2dbc.core.Parameter;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Component
public class MedicalCallBack implements BeforeSaveCallback<Doctor> {

    @Autowired
    PasswordEncoder passwordEncoder;

    @Override
    public Publisher<Doctor> onBeforeSave(Doctor entity, OutboundRow row, SqlIdentifier table) {
        row.put("is_verified", Parameter.from(false));
        row.put("password",Parameter.from(passwordEncoder.encode(entity.getPassword())));
        return Mono.just(entity);
    }
}
  • handler处理流程
  public Mono<ServerResponse> save(ServerRequest request){
       return request.bodyToMono(Doctor.class)
               .flatMap(doctor -> doctorService.saveDoctor(doctor))
               .flatMap(d -> ServerResponse.created(URI.create("/doctors/" + d.getId())).bodyValue(d));

    }


来自为知笔记(Wiz)

标签:r2dbc,spring,springframework,Entity,passwordEncoder,org,import,data
From: https://www.cnblogs.com/baiyifengyun/p/17059038.html

相关文章

  • Java | Spring Boot数据源配置原理
    在数据库访问过程中,“数据源”无疑是最重要的概念之一,它不仅可以对与数据库访问相关的各种参数进行封装和统一管理,还可以管理数据库连接池,提高数据库连接性能。目前,在市面......
  • Java | Spring Boot统一日志框架
    在项目开发中,日志十分的重要,不管是记录运行情况还是定位线上问题,都离不开对日志的分析。在Java领域里存在着多种日志框架,如JCL、SLF4J、Jboss-logging、jUL、log4j、log......
  • 通过Docker启动DB2,并在Spring Boot整合DB2
    1简介DB2是IBM的一款优秀的关系型数据库,简单学习一下。2Docker安装DB2为了快速启动,直接使用Docker来安装DB2。先下载镜像如下:dockerpullibmcom/db2:11.5.0.0启动......
  • Spring 自动装配
    Spring框架的自动装配功能使您可以隐式注入对象依赖项。它在内部使用setter或构造函数注入。自动装配不能用于注入基本值和字符串值。它仅适用于参考。自动装配的优点它......
  • Spring setter方法注入
    我们也可以通过setter方法注入依赖项。 <bean>的 <property>子元素用于Setter注入。在这里,我们要注入 原始和基于字符串的值从属对象(包含对象)集合值等通过setter方......
  • SpringCloud GateWay网关(入门)
    1、介绍强烈推荐,看官网文档SpringCloudGateway①简介Cloud全家桶里有个重要组件:网关SpringCloudGateway基于WebFlux框架WebFlux底层使用高性能的Reactor模式(异步......
  • day04-Spring管理Bean-IOC-02
    Spring管理Bean-IOC-022.基于XML配置bean2.7通过util空间名称创建listBookStore.java:packagecom.li.bean;importjava.util.List;/***@author李*@version......
  • Spring6
    Spring6Spring项目的创建打开IDEA,新建一个maven项目在maven项目中引入spring的仓库和依赖<repositories><repository><id>repository.spri......
  • 学习笔记——Spring中的注解;Spring中装配对象的注解;使用注解配置对象中属性
    2023-01-17一、Spring中的注解 1、使用注解的原因(1)使用注解将对象装配到IOC容器中(2)使用注解管理对象之间依赖关系(自动装配)2、Spring中装配对象的注解(1)@Component标......
  • j2ee、JavaSE、MVC、Spring
    JavaEE(JavaEnterpriseEdition)java企业版,多用于企业级开发,包括web开发等等。一般用于开发JavaWeb应用程序,初级的一般是用JSP(JavaServerPages)+servlet+JavaBean来开发的,......