当前位置:   article > 正文

Spring WebFlux + React搭建后台管理系统(2): 主要业务逻辑实现_webflux reactivesecuritycontextholder.getcontext()

webflux reactivesecuritycontextholder.getcontext()

上一篇简单实现了数据库表的生成以及生成POJO,这里主要介绍后台服务中实现的接口以及如何通过使用webflux实现一些复杂的逻辑,以及登录鉴权等内容。

业务接口

如下为整理的实现的借口汇总,应为是RESTful接口,一个path会对应多个功能:

Url HttpMethod 描述
/api/auth/logout get 登出
/api/auth/login post 登入
/api/user get 通过用户名获取数据用户
/api/user post 存储用户
/api/user put 更新用户数据
/api/user delete 通过id删除用户
/api/user/all get 获取全部用户数据
/api/role get 通过权限名称获取
/api/role post 存储权限
/api/role put 更新权限
/api/role delete 通过id删除权限
/api/role/all get 获取所有权限数据
/api/url get 通过url获取接口信息
/api/url post 存储接口信息
/api/url put 更新接口信息
/api/url delete 通过id删除接口信息
/api/url/all get 获取所有接口信息

实现业务逻辑

简单通过user局里,api和user的逻辑基本相同,role更简单一些

1 . 生成Pojo

具体过程上一篇已经讲过了,通过使用idea可以很简单的生成,不过reactive的models和jpa的有些差别,有些点需要注意:

  • 不能使用jpa中EntityListeners自动生成更新人更新日期等,需要自己写
  • mysql中datetime类型对应的类型为LocalDateTime,这也是不同之处
  • 不存在与数据库中的字段使用@Transient进行注释
  • 请求返回json不希望显示的字段使用@JsonIgnore
  • 添加roles字段用于存放权限信息
  • 因为几个对象都有createBy等属性,通过编写DataChange接口通过泛型添加
@Table("sys_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
@With
public class SysUser implements DataChange {
   

    @Id
    private long id;

    private String username;

    private String avatar;

    //@JsonIgnore   // 请求返回json不希望显示的字段
    private String password;

    private String email;

    private String mobile;

    private long frozen;

    private String createBy;

    private java.time.LocalDateTime createTime;

    private String lastUpdateBy;

    private java.time.LocalDateTime lastUpdateTime;

    @Transient   // 不存在与数据库中的字段
    private List<String> roles;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

2. 编写Repository

  • 继承ReactiveCrudRepository使用
  • 使用方法和jpa类似
  • 注意返回类型,Mono或者Flux,返回单个用Mono,多个Collection类型的用Flux
  • 基本的crud方法ReactiveCrudRepository中都有
/**
 * @author: ffzs
 * @Date: 2020/8/26 下午12:51
 */
public interface SysUserRepository extends ReactiveCrudRepository<SysUser, Long> {
   
    Mono<SysUser> findByUsername(String username);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3. 编写DataChange接口文件

  • 为了更方便使用泛型对几种对象实现设置属性
/**
 * @author: ffzs
 * @Date: 2020/8/26 下午11:21
 */

public interface DataChange {
   

    void setCreateBy(String createBy);

    void setCreateTime(LocalDateTime createTime);

    void setLastUpdateBy(String lastUpdateBy);

    void setLastUpdateTime(LocalDateTime lastUpdateTime);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

4. 编写为对象添加修改时间等属性服务

  • 由于r2dbc不支持自动更新修改时间,修改人的功能
  • 编写如下方法自行进行修改
/**
 * @author: ffzs
 * @Date: 2020/8/27 下午1:51
 */
@Service
public class MarkDataService {
   

    public <T extends DataChange> Mono<T> createObj (T obj) {
   
        return ReactiveSecurityContextHolder.getContext()
                .map
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/68908
推荐阅读
相关标签
  

闽ICP备14008679号