栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring-boot集成Apache ShardingSphere 5.0.0 感知

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring-boot集成Apache ShardingSphere 5.0.0 感知

spring-boot集成Apache ShardingSphere 5.0.0 感知

文章目录
  • spring-boot集成Apache ShardingSphere 5.0.0 感知
    • 一、前言
    • 二、与spring-boot集成实现(数据加密)
      • 1.建表语句
      • 2.pom.xml
      • 3.application.yml
      • 4.CURD

一、前言

数据加密

Apache ShardingSphere 通过对用户输入的 SQL 进行解析,并依据用户提供的加密规则对 SQL 进行改写,从而实现对原文数据进行加密,并将原文数据(可选)及密文数据同时存储到底层数据库。 在用户查询数据时,它仅从数据库中取出密文数据,并对其解密,最终将解密后的原始数据返回给用户。 Apache ShardingSphere 自动化 & 透明化了数据加密过程,让用户无需关注数据加密的实现细节,像使用普通数据那样使用加密数据。 此外,无论是已在线业务进行加密改造,还是新上线业务使用加密功能,Apache ShardingSphere 都可以提供一套相对完善的解决方案。

二、与spring-boot集成实现(数据加密) 1.建表语句
CREATE TABLE `t_encrypt` (
  `id` varchar(36) COLLATE utf8_bin NOT NULL,
  `phone_no_cipher` varchar(512) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
2.pom.xml
    
        1.8
        3.4.1
        5.0.0
    

        
            com.baomidou
            mybatis-plus-boot-starter
            ${mybatis-plus.version}
        
        
            org.apache.shardingsphere
            shardingsphere-jdbc-core-spring-boot-starter
            ${shardingsphere.version}
        

3.application.yml
spring:
  shardingsphere:
    props:
      sql-show: true
    datasource:
      ds0:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/ds0?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true
        password: 123456
        type: com.zaxxer.hikari.HikariDataSource
        username: root
      ds1:
        driver-class-name: com.mysql.cj.jdbc.Driver
        jdbc-url: jdbc:mysql://localhost:3306/ds1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT&allowPublicKeyRetrieval=true
        password: 123456
        type: com.zaxxer.hikari.HikariDataSource
        username: root
      names: ds0,ds1
    rules:
      encrypt:
        encryptors:
          custom-encrypt:
            type: AES
            props:
              # 对称加密key(君不见黄河之水天上来,奔流到海不复回。)
              aes-key-value: jbjhhzstsl,bldhbfh.
        tables:
          t_encrypt:
            # 使用密文列查询(默认true)
            query-with-cipher-column: true
            columns:
              phone_no:
                # 逻辑列(虚拟列)
                logic-column: phone_no
                # 密文列(真实列)
                cipher-column: phone_no_cipher
                # 原文列(真实列,可选)
                # plain-column: phone_no_plain
                # 加密策略名称与上方对应(推荐使用短横线风格)
                encryptor-name: custom-encrypt
mybatis-plus:
  global-config:
    db-config:
      id-type: assign_id

内置的加密算法,MD5、AES、RC4;若准备自定义算法可参照数据加密,基于SPI机制自动扩展。不清楚SPI的原理,可以先阅读下源码分析-JDBC SPI加载机制。

4.CURD
  • EncryptController.java
package com.example.demo.controller;


import com.example.demo.entity.Encrypt;
import com.example.demo.service.EncryptService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.List;


@RestController
@RequestMapping("/encrypt")
public class EncryptController {
    
    @Resource
    private EncryptService encryptService;

    @GetMapping("/{id}")
    public Encrypt getById(@PathVariable String id) {
        return this.encryptService.getById(id);
    }

    
    @GetMapping("/selectByPhoneNo/{phoneNo}")
    public List selectByPhoneNo(@PathVariable String phoneNo) {
        return this.encryptService.selectByPhoneNo(phoneNo);
    }

    @GetMapping
    public List list() {
        return this.encryptService.list();
    }

    @GetMapping("/count")
    public Integer count() {
        return this.encryptService.count();
    }

    @GetMapping("/mock")
    public String mock() {
        for (int i = 0; i < 12; i++) {
            final Encrypt encrypt = new Encrypt();
            encrypt.setPhoneNo(String.valueOf(i));
            this.encryptService.save(encrypt);
        }
        return "SUCCESS";
    }

}


  • EncryptService.java
package com.example.demo.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.demo.entity.Encrypt;

import java.util.List;


public interface EncryptService extends IService {

    List selectByPhoneNo(String phoneNo);
}


  • EncryptServiceImpl.java
package com.example.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.demo.dao.EncryptDao;
import com.example.demo.entity.Encrypt;
import com.example.demo.service.EncryptService;
import org.springframework.stereotype.Service;

import java.util.List;


@Service("encryptService")
public class EncryptServiceImpl extends ServiceImpl implements EncryptService {

    @Override
    public List selectByPhoneNo(String phoneNo) {
        return this.baseMapper.selectList(new QueryWrapper().lambda().eq(Encrypt::getPhoneNo, phoneNo));
    }
}


  • EncryptDao.java
package com.example.demo.dao;

import com.baomidou.mybatisplus.core.mapper.baseMapper;
import com.example.demo.entity.Encrypt;


public interface EncryptDao extends baseMapper {

}


  • Encrypt.java
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import java.io.Serializable;


@SuppressWarnings("serial")
@TableName("t_encrypt")
public class Encrypt extends Model {

    @TableId
    private String id;
    
    private String phoneNo;
    

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getPhoneNo() {
        return phoneNo;
    }

    public void setPhoneNo(String phoneNo) {
        this.phoneNo = phoneNo;
    }

    
    @Override
    protected Serializable pkVal() {
        return this.id;
    }
    }


更多:
spring-boot集成Apache ShardingSphere 5.0.0 初识

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/667231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号