月木学途开发 1.后台用户模块

概述

权限控制采用springsecurity

数据库设计

用户表
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (`aid` int(32) NOT NULL AUTO_INCREMENT,`email` varchar(50) DEFAULT NULL,`username` varchar(50) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,`phoneNum` varchar(20) DEFAULT NULL,`status` tinyint(1) DEFAULT NULL,`adminImg` varchar(255) DEFAULT NULL,PRIMARY KEY (`aid`),UNIQUE KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
角色表
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (`rid` int(32) NOT NULL AUTO_INCREMENT,`roleName` varchar(50) DEFAULT NULL,`roleDesc` varchar(50) DEFAULT NULL,PRIMARY KEY (`rid`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

权限表
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission` (`pid` int(32) NOT NULL AUTO_INCREMENT,`permissionName` varchar(50) DEFAULT NULL,`permissionDesc` varchar(50) DEFAULT NULL,PRIMARY KEY (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

用户角色关联表
DROP TABLE IF EXISTS `admin_role`;
CREATE TABLE `admin_role` (`aid` varchar(32) NOT NULL,`rid` varchar(32) NOT NULL,PRIMARY KEY (`aid`,`rid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

角色权限关联表
DROP TABLE IF EXISTS `role_permission`;
CREATE TABLE `role_permission` (`rid` varchar(32) DEFAULT NULL,`pid` varchar(32) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

实体类设计

用户实体类
@Data
public class Admin implements Serializable {@TableIdprivate Integer aid;private String username;//姓名private String password;//密码private String phoneNum;//手机号private String email;//邮箱private String adminImg;//头像private boolean status; // 状态 true可用 false禁用@TableField(exist = false) // 不是数据库的字段private List<Role> roles; // 角色集合
}
角色实体类
@Data
public class Role implements Serializable {@TableIdprivate Integer rid;private String roleName; // 角色名private String roleDesc; // 角色介绍@TableField(exist = false) // 不是数据库的字段private List<Permission> permissions;// 权限集合
}
权限实体类
@Data
public class Permission implements Serializable {@TableIdprivate Integer pid;private String permissionName; //权限名private String permissionDesc;//权限详情
}

Mapper接口设计

包的层级关系

AdminMapper
public interface AdminMapper extends BaseMapper<Admin> {// 根据id查询管理员,包括角色和权限Admin findById(Integer id);// 删除管理员的所有角色void deleteAdminAllRole(Integer id);// 给管理员添加角色void addRoleToAdmin(@Param("aid") Integer aid, @Param("rid") Integer rid);// 根据管理员名查询权限List<Permission> findAllPermission(String username);
}
AdminMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jkw.mapper.AdminMapper"><resultMap id="adminMapper" type="jkw.pojo.Admin"><id property="aid" column="aid"></id><result property="username" column="username"></result><result property="email" column="email"></result><result property="phoneNum" column="phoneNum"></result><result property="status" column="status"></result><result property="adminImg" column="adminImg"></result><collection property="roles" column="aid" ofType="jkw.pojo.Role"><id property="rid" column="rid"></id><result property="roleName" column="roleName"></result><result property="roleDesc" column="roleDesc"></result><collection property="permissions" column="rid" ofType="jkw.pojo.Permission"><id property="pid" column="pid"></id><result property="permissionName" column="permissionName"></result><result property="permissionDesc" column="permissionDesc"></result></collection></collection></resultMap><delete id="deleteAdminAllRole" parameterType="int">DELETEFROM admin_roleWHERE aid = #{id}</delete><select id="findById" parameterType="int" resultMap="adminMapper">SELECT *FROM adminLEFT JOIN admin_roleON admin.aid = admin_role.aidLEFT JOIN roleON admin_role.rid = role.ridLEFT JOIN role_permissionON role.rid = role_permission.ridLEFT JOIN permissionON role_permission.pid = permission.pidWHERE admin.aid = #{id}</select><insert id="addRoleToAdmin">INSERT INTO admin_roleVALUES (#{aid}, #{rid});</insert><select id="findAllPermission" resultType="jkw.pojo.Permission" parameterType="string">SELECT DISTINCT permission.*FROM adminLEFT JOIN admin_roleON admin.aid = admin_role.aidLEFT JOIN roleON admin_role.rid = role.ridLEFT JOIN role_permissionON role.rid = role_permission.ridLEFT JOIN permissionON role_permission.pid = permission.pidWHERE admin.username = #{username}</select></mapper>

RoleMapper
public interface RoleMapper extends BaseMapper<Role> {// 删除角色_权限中间表的相关数据void deleteRoleAllPermission(Integer rid);// 删除用户_角色表的相关数据void deleteRoleAllAdmin(Integer rid);// 根据id查询角色,包括权限Role findById(Integer id);// 给角色添加权限void addPermissionToRole(@Param("rid") Integer rid, @Param("pid")Integer pid);
}
RoleMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jkw.mapper.RoleMapper"><resultMap id="roleMapper" type="jkw.pojo.Role"><id property="rid" column="rid"></id><result property="roleName" column="roleName"></result><result property="roleDesc" column="roleDesc"></result><collection property="permissions" column="rid" ofType="jkw.pojo.Permission"><id property="pid" column="pid"></id><result property="permissionName" column="permissionName"></result><result property="permissionDesc" column="permissionDesc"></result></collection></resultMap><delete id="deleteRoleAllPermission" parameterType="int">DELETEFROM role_permissionWHERE rid = #{rid}</delete><delete id="deleteRoleAllAdmin" parameterType="int">DELETEFROM admin_rolewhere rid = #{rid}</delete><select id="findById" parameterType="int" resultMap="roleMapper">SELECT *FROM roleLEFT JOIN role_permissionON role.rid = role_permission.ridLEFT JOIN permissionON role_permission.pid = permission.pidWHERE role.rid = #{id}</select><insert id="addPermissionToRole">INSERT INTO role_permissionVALUES (#{rid}, #{pid});</insert>
</mapper>

PermissionMapper
public interface PermissionMapper extends BaseMapper<Permission> {// 删除角色_权限表中的相关数据void deletePermissionAllRole(Integer pid);
}

PermissionMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jkw.mapper.PermissionMapper"><delete id="deletePermissionAllRole" parameterType="int">DELETEFROM role_permissionWHERE pid = #{pid}</delete>
</mapper>

service服务层设计

AdminService
/*** 用户服务层*/public interface AdminService {// 新增管理员void add(Admin admin);// 修改管理员void update(Admin admin);// 删除管理员【自定义】void delete(Integer id);//修改状态void updateStatus(Integer id);// 根据id查询管理员(查询用户详情)【自定义】Admin findById(Integer id);//分页查询管理员Page<Admin> search(int page, int size);// 修改管理员角色【自定义】void updateRoleToAdmin(Integer aid, Integer[] rids);// 根据名字查询管理员Admin findByName(String username);// 根据名字查询管理员所有权限List<Permission> findAllPermission(String username);
}

AdminServiceImpl
@Service
@Transactional
public class AdminServiceImpl implements AdminService {@Autowiredprivate AdminMapper adminMapper;@Overridepublic void add(Admin admin) {adminMapper.insert(admin);//初始化用户,不然添加后什么角色都没有,会报错adminMapper.addRoleToAdmin(admin.getAid(), 2);}@Overridepublic void update(Admin admin) {// 如果前端传来空密码,则密码还是原来的密码if (!StringUtils.hasText(admin.getPassword())) {// 查询原来的密码String password = adminMapper.selectById(admin.getAid()).getPassword();admin.setPassword(password);}adminMapper.updateById(admin);}@Overridepublic void delete(Integer id) {// 删除用户的所有角色adminMapper.deleteAdminAllRole(id);// 删除用户adminMapper.deleteById(id);}@Overridepublic void updateStatus(Integer id) {Admin admin = adminMapper.selectById(id);admin.setStatus(!admin.isStatus());//状态取反adminMapper.updateById(admin);}@Overridepublic Admin findById(Integer id) {return adminMapper.findById(id);}@Overridepublic Page<Admin> search(int page, int size) {return adminMapper.selectPage(new Page<>(page, size), null);}@Overridepublic void updateRoleToAdmin(Integer aid, Integer[] rids) {// 删除用户的所有角色adminMapper.deleteAdminAllRole(aid);// 重新添加管理员角色for (Integer rid : rids) {adminMapper.addRoleToAdmin(aid, rid);}}@Overridepublic Admin findByName(String username) {QueryWrapper<Admin> wrapper = new QueryWrapper();wrapper.eq("username", username);Admin admin = adminMapper.selectOne(wrapper);return admin;}@Overridepublic List<Permission> findAllPermission(String username) {return adminMapper.findAllPermission(username);}
}

RoleService
/*** 角色服务接口*/
public interface RoleService {// 新增角色void add(Role role);// 修改角色void update(Role role);// 删除角色void delete(Integer id);// 根据id查询角色【自定义】Role findById(Integer id);// 查询所有角色List<Role> findAll();// 分页查询角色Page<Role> search(int page, int size);// 修改角色的权限【自定义】void addPermissionToRole(Integer rid, Integer[] pids);
}

RoleServiceImpl
@Service
@Transactional
public class RoleServiceImpl implements RoleService {@Autowiredprivate RoleMapper roleMapper;@Overridepublic void add(Role role) {roleMapper.insert(role);}@Overridepublic void update(Role role) {roleMapper.updateById(role);}@Overridepublic void delete(Integer id) {// 删除角色roleMapper.deleteById(id);// 删除角色_权限中间表的相关数据roleMapper.deleteRoleAllPermission(id);// 删除用户_角色中间表的相关数据roleMapper.deleteRoleAllAdmin(id);}@Overridepublic Role findById(Integer id) {return roleMapper.findById(id);}@Overridepublic List<Role> findAll() {return roleMapper.selectList(null);}@Overridepublic Page<Role> search(int page, int size) {return roleMapper.selectPage(new Page(page,size),null);}@Overridepublic void addPermissionToRole(Integer rid, Integer[] pids) {// 删除角色的所有权限roleMapper.deleteRoleAllPermission(rid);// 给角色添加权限for (Integer pid : pids) {roleMapper.addPermissionToRole(rid,pid);}}
}
PermissionService
/*** 权限服务接口*/
public interface PermissionService {// 新增权限void add(Permission permission);// 修改权限void update(Permission permission);// 删除权限【自定义】void delete(Integer id);// 根据id查询权限Permission findById(Integer id);// 查询所有权限List<Permission> findAll();// 分页查询权限Page<Permission> search(int page, int size);
}

PermissionServiceImpl
@Transactional
@Service
public class PermissionServiceImpl implements PermissionService {@Autowiredprivate PermissionMapper permissionMapper;@Overridepublic void add(Permission permission) {permissionMapper.insert(permission);}@Overridepublic void update(Permission permission) {permissionMapper.updateById(permission);}@Overridepublic void delete(Integer id) {// 删除权限permissionMapper.deleteById(id);// 删除角色_权限表中的相关数据permissionMapper.deletePermissionAllRole(id);}@Overridepublic Permission findById(Integer id) {return permissionMapper.selectById(id);}@Overridepublic List<Permission> findAll() {return permissionMapper.selectList(null);}@Overridepublic Page<Permission> search(int page, int size) {return permissionMapper.selectPage(new Page(page,size),null);}
}

controller控制交互层设计

AdminController
@RestController
@RequestMapping("/sys/admin")
@CrossOrigin
public class AdminController {@Autowiredprivate AdminService adminService;@Autowiredprivate PasswordEncoder encoder;/*** 新增管理员** @param admin 管理员* @return*/@PostMapping("/add")public BaseResult add(Admin admin) {String password = admin.getPassword();password = encoder.encode(password);admin.setPassword(password);adminService.add(admin);return BaseResult.ok();}/*** 修改管理员(设置空密码则还是原来密码)** @param admin 管理员* @return*/@PostMapping("/update")public BaseResult update(Admin admin) {String password = admin.getPassword();if (StringUtils.hasText(password)) { // 密码不为空加密password = encoder.encode(password);admin.setPassword(password);}adminService.update(admin);return BaseResult.ok();}/*** 删除管理员(附带对应的角色)** @param aid 管理员id* @return*/@DeleteMapping("/delete")public BaseResult delete(Integer aid) {adminService.delete(aid);return BaseResult.ok();}/*** 修改管理员的状态** @param aid 管理员id* @return*/@PostMapping("/updateStatus")public BaseResult updateStatus(Integer aid) {adminService.updateStatus(aid);return BaseResult.ok();}/*** 根据id查询管理员(详情)** @param aid 管理员id* @return*/@GetMapping("/findById")public BaseResult<Admin> findById(Integer aid) {Admin admin = adminService.findById(aid);return BaseResult.ok(admin);}/*** 分页查询管理员** @param page 当前页* @param size 每页条数* @return*/@PreAuthorize("hasAnyAuthority('/sys/admin')")@GetMapping("/search")public BaseResult<Page<Admin>> search(int page, int size) {Page<Admin> adminPage = adminService.search(page, size);return BaseResult.ok(adminPage);}/*** 修改管理员角色** @param aid  管理员id* @param rids 角色id* @return*/@PostMapping("/updateRoleToAdmin")public BaseResult updateRoleToAdmin(Integer aid, Integer[] rids) {adminService.updateRoleToAdmin(aid, rids);return BaseResult.ok();}/*** 获取登录管理员名** @return 管理员名*/@GetMapping("/getUsername")public BaseResult<String> getUsername() {// 1.获取会话对象SecurityContext context = SecurityContextHolder.getContext();// 2.获取认证对象Authentication authentication = context.getAuthentication();// 3.获取登录用户信息UserDetails userDetails = (UserDetails) authentication.getPrincipal();String username = userDetails.getUsername();return BaseResult.ok(username);}@GetMapping("/findByUsername")public BaseResult findByUsername(String username){Admin admin = adminService.findByName(username);return BaseResult.ok(admin);}
}

RoleController
@RestController
@RequestMapping("/sys/role")
@CrossOrigin
public class RoleController {@Autowiredprivate RoleService roleService;/*** 新增角色** @param role 角色对象* @return 执行结果*/@PostMapping("/add")public BaseResult add(Role role) {roleService.add(role);return BaseResult.ok();}/*** 修改角色** @param role 角色对象* @return 执行结c果*/@PostMapping("/update")public BaseResult update(Role role) {roleService.update(role);return BaseResult.ok();}/*** 删除角色(包括中间表的管理员、权限)** @param rid 角色id* @return 执行结果*/@DeleteMapping("/delete")public BaseResult delete(Integer rid) {roleService.delete(rid);return BaseResult.ok();}/*** 根据id查询角色** @param rid* @return 查询到的角色*/@GetMapping("/findById")public BaseResult<Role> findById(Integer rid) {Role role = roleService.findById(rid);return BaseResult.ok(role);}/*** 查询所有角色** @return 查询结果*/@GetMapping("/findAll")public BaseResult<List<Role>> findAll() {List<Role> all = roleService.findAll();return BaseResult.ok(all);}/*** 分页查询角色** @param page 页码* @param size 每页条数* @return 查询结果*/@PreAuthorize("hasAnyAuthority('/sys/role')")@GetMapping("/search")public BaseResult<Page<Role>> search(int page, int size) {Page<Role> page1 = roleService.search(page, size);return BaseResult.ok(page1);}/*** 修改角色的权限** @param rid  角色id* @param pids 权限id* @return 执行结果*/@PostMapping("/updatePermissionToRole")public BaseResult updatePermissionToRole(Integer rid, Integer[] pids) {roleService.addPermissionToRole(rid, pids);return BaseResult.ok();}
}

PermissionController
@RestController
@RequestMapping("/sys/permission")
@CrossOrigin
public class PermissionController {@Autowiredprivate PermissionService permissionService;/*** 新增权限** @param permission 权限对象* @return 执行结果*/@PostMapping("/add")public BaseResult add(Permission permission) {permissionService.add(permission);return BaseResult.ok();}/*** 修改权限** @param permission 权限对象* @return 执行结果*/@PostMapping("/update")public BaseResult update(Permission permission) {permissionService.update(permission);return BaseResult.ok();}/*** 删除权限(包括中间表对应的角色)** @param pid 权限id* @return 执行结果*/@DeleteMapping("/delete")public BaseResult delete(Integer pid) {permissionService.delete(pid);return BaseResult.ok();}/*** 根据id查询权限** @param pid 权限id* @return 查询结果*/@GetMapping("/findById")public BaseResult<Permission> findById(Integer pid) {Permission permission = permissionService.findById(pid);return BaseResult.ok(permission);}/*** 查询所有权限** @return 所有权限*/@GetMapping("/findAll")public BaseResult<List<Permission>> findAll() {List<Permission> all = permissionService.findAll();return BaseResult.ok(all);}/*** 分页查询权限** @param page 页面* @param size 每页条数* @return 查询结果*/@PreAuthorize("hasAnyAuthority('/sys/permission')")@GetMapping("/search")public BaseResult<Page<Permission>> search(int page, int size) {Page<Permission> permissionPage = permissionService.search(page, size);return BaseResult.ok(permissionPage);}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/137595.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Ubuntu 18.04上支持C++17的std::filesystem的方法

在Ubuntu 18.04上通过命令sudo apt install gcc g安装的gcc/g版本为7.5&#xff0c;此版本并不直接支持filesystem&#xff0c;如下图所示&#xff1a; Ubuntu 18.04上的g 7.5支持experimental的filesystem,即std::experimental::filesystem&#xff0c;若想使Ubuntu 18.04支持…

软件设计原则扩展

一、引言 经典的软件设计7大原则 开闭原则&#xff08;Open Close Principle, OCP&#xff09; 依赖倒置原则&#xff08;Dependence Inversion Principle, DIP&#xff09; 单一职责原则&#xff08;Simple Responsibility Principle, SRP&#xff09; 接口隔离原则&#xf…

OPENCV实现DNN图像分类

使用步骤1 使用步骤2 使用步骤3 使用步骤4 使用步骤5 使用步骤6 完整代码如下: import numpy as np

Git --- 基础介绍

Git --- 基础介绍 git 是什么git --- 工作区, 暂存区, 资源库git --- 文件状态git --- branch 和 HEADgit --- 一次正常的git提交流程 git 是什么 Git是一款分布式源代码管理工具(版本控制工具)Git和其他传统版本控制系统比较: 传统的版本控制系统(例如 SVN)是基于差异的版本控…

从零开始学习 Java:简单易懂的入门指南之Stream流(二十七)

Stream流 Stream流1.体验Stream流2.Stream流的常见生成方式3.Stream流中间操作方法4.Stream流终结操作方法5.Stream流的收集操作6.Stream流综合练习 Stream流 1.体验Stream流 案例需求 按照下面的要求完成集合的创建和遍历 创建一个集合&#xff0c;存储多个字符串元素把集合中…

ElasticSearch(ES)简单介绍

ES简介 Elasticsearch&#xff08;通常简称为ES&#xff09;是一个开源的分布式搜索和分析引擎&#xff0c;旨在处理各种类型的数据&#xff0c;包括结构化、半结构化和非结构化数据。它最初是为全文搜索而设计的&#xff0c;但随着时间的推移&#xff0c;它已经演变成一个功能…

后端返回的id到前端后 后面几位数全部变成0了 问题解决

这里 我在java控制台上 输出了id的值 但请求到前端后 很明显就不太一样了 这个问题比较经典的叫法是 雪花算法生成的ID过长&#xff0c;前端接收精度丢失 原因 前端使用number类型进行接收&#xff0c;number类型的范围小于后台Long类型的范围&#xff0c;出现了精度丢失问题…

【Vue】路由与Node.js下载安装及环境配置教程

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《Vue快速入门》。&#x1f3af;&#x1f3af; &…

界面控件DevExpress WinForms HTML-CSS模板:预设计UI模板加速.NET应用开发

在过去的一年里&#xff0c;DevExpress官方引入了两个强大的功能来加速/简化.NET桌面应用的开发&#xff0c;当一起使用时&#xff0c;您可以创建优雅/个性化的用户界面&#xff0c;减少重复的代码&#xff0c;从而节省更多的项目时间。 DevExpress WinForms有180组件和UI库&am…

2023_Spark_实验十二:Spark高级算子使用

掌握Spark高级算子在代码中的使用 相同点分析 三个函数的共同点&#xff0c;都是Transformation算子。惰性的算子。 不同点分析 map函数是一条数据一条数据的处理&#xff0c;也就是&#xff0c;map的输入参数中要包含一条数据以及其他你需要传的参数。 mapPartitions函数是一个…

公开研讨会|智能制造中生产管理挑战与解决方案(9月29日)

随着新能源行业的规模化发展&#xff0c;企业增效降本成为迫切需求。生产制造能力成为关键因素&#xff0c;其发展必将是在大规模生产的前提下&#xff0c;追寻极简制造、极限制造以及智能制造。然而在这个发展过程中&#xff0c;企业依旧面临着诸多挑战&#xff1a; 产品设计…

DAZ To UMA⭐一.DAZ使用简介 / 设置DAZ导出的内容 / 获取模型纹理贴图

文章目录 🟥 DAZ快捷键🟧 DAZ界面介绍🟩 设置DAZ导出的内容1️⃣ 找到要导出的参数名称2️⃣ 打开导出面板3️⃣ 设置导出规则举例 : 导出身体Assets🟦 获取模型纹理贴图🟥 DAZ快捷键 移动物体:ctrl+alt+鼠标左键 旋转物体:ctrl+alt+鼠标右键 导入模型:双击左侧模型…

大数据-玩转数据-Flink SQL编程

一、概念 1.1 Apache Flink 两种关系型 API Apache Flink 有两种关系型 API 来做流批统一处理&#xff1a;Table API 和 SQL。 Table API 是用于 Scala 和 Java 语言的查询API&#xff0c;它可以用一种非常直观的方式来组合使用选取、过滤、join 等关系型算子。 Flink SQL 是…

23种设计模式汇总详解

设计原则 中文名称英文名称含义解释单一职责原则Single Responsibility Principle(SRP)任何一个软件模块都应该只对某一类行为者负责一个类只干一件事&#xff0c;实现类要单一开闭原则Open-Close Principle(OCP)软件实体&#xff08;类、模块、函数等&#xff09;应该是可以扩…

七绝 . 秋寒

题记 拜读署名“淡定人生D”近日发表在“ 今日头条 ”上的古体诗《七绝 . 凉》&#xff0c;本老朽在由衷赞叹该女子才貌双全之时&#xff0c;也对自己寄居养老的成都崇州街子古镇今日下午的秋寒突至天气&#xff0c;情怀涌动&#xff0c;思绪万千&#xff0c;亦作《七绝 . 秋寒…

图像处理之《基于语义对象轮廓自动生成的生成隐写术》论文精读

一、相关知识 首先我们需要了解传统隐写和生成式隐写的基本过程和区别。传统隐写需要选定一幅封面图像&#xff0c;然后使用某种隐写算法比如LSB、PVD、DCT等对像素进行修改将秘密嵌入到封面图像中得到含密图像&#xff0c;通过信道传输后再利用算法的逆过程提出秘密信息。而生…

IPV6真的神

ipv6 地址短缺的现实&#xff0c;万物互联的未来<全局可达性> 1、路由表更小。地址分配遵循聚类原则&#xff0c;路由表用Entry的路由表示一片子网。 2、更强的组播以及流控制。为媒体服务质量QoS。控制提供了良好的网络平台。 3、DHCPv6,自动配置地址。使得网&#xff0…

算法基础:图

图论 图论〔Graph Theory〕是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形&#xff0c;这种图形通常用来描述某些事物之间的某种特定关系&#xff0c;用点代表事物&#xff0c;用连接两点的线表示相应两个事物间具有这种关系。 …

openGauss天津用户组招募正式启动,欢迎报名

openGauss天津用户组招募正式启动&#xff0c;欢迎报名&#xff01; openGauss用户组(openGauss User Group&#xff0c;简称oGUG)是一个让openGauss用户就技术特性、最佳实践、运营进展等方向交流的开放性本地社区。oGUG致力于构建一个开放、多元、包容的 openGauss城市用户交…

Java高级-注解

注解 1.介绍2.元注解3.注解的解析4.注解的应用场景 1.介绍 注解 Annotation 就是Java代码里的特殊标记&#xff0c;作用是让其他程序根据注解信息来决定什么是执行该程序注解&#xff1a;注解可以在类上、构造器上、方法上、成员变量上、参数上等位置 自定义注解 /*** 自定…