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

news2025/2/25 2:27:47

概述

权限控制采用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 {
    @TableId
    private 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 {
    @TableId
    private Integer rid;
    private String roleName; // 角色名
    private String roleDesc; // 角色介绍
    @TableField(exist = false) // 不是数据库的字段
    private List<Permission> permissions;// 权限集合
}
权限实体类
@Data
public class Permission implements Serializable {
    @TableId
    private 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 mapper
        PUBLIC "-//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">
        DELETE
        FROM admin_role
        WHERE aid = #{id}
    </delete>
    <select id="findById" parameterType="int" resultMap="adminMapper">
        SELECT *
        FROM admin
                 LEFT JOIN admin_role
                           ON admin.aid = admin_role.aid
                 LEFT JOIN role
                           ON admin_role.rid = role.rid
                 LEFT JOIN role_permission
                           ON role.rid = role_permission.rid
                 LEFT JOIN permission
                           ON role_permission.pid = permission.pid
        WHERE admin.aid = #{id}
    </select>
    <insert id="addRoleToAdmin">
        INSERT INTO admin_role
        VALUES (#{aid}, #{rid});
    </insert>
    <select id="findAllPermission" resultType="jkw.pojo.Permission" parameterType="string">
        SELECT DISTINCT permission.*
        FROM admin
                 LEFT JOIN admin_role
                           ON admin.aid = admin_role.aid
                 LEFT JOIN role
                           ON admin_role.rid = role.rid
                 LEFT JOIN role_permission
                           ON role.rid = role_permission.rid
                 LEFT JOIN permission
                           ON role_permission.pid = permission.pid
        WHERE 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 mapper
        PUBLIC "-//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">
        DELETE
        FROM role_permission
        WHERE rid = #{rid}
    </delete>

    <delete id="deleteRoleAllAdmin" parameterType="int">
        DELETE
        FROM admin_role
        where rid = #{rid}
    </delete>
    <select id="findById" parameterType="int" resultMap="roleMapper">
        SELECT *
        FROM role
                 LEFT JOIN role_permission
                           ON role.rid = role_permission.rid
                 LEFT JOIN permission
                           ON role_permission.pid = permission.pid
        WHERE role.rid = #{id}
    </select>
    <insert id="addPermissionToRole">
        INSERT INTO role_permission
        VALUES (#{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 mapper
        PUBLIC "-//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">
        DELETE
        FROM role_permission
        WHERE 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 {
    @Autowired
    private AdminMapper adminMapper;

    @Override
    public void add(Admin admin) {
        adminMapper.insert(admin);
        //初始化用户,不然添加后什么角色都没有,会报错
        adminMapper.addRoleToAdmin(admin.getAid(), 2);
    }

    @Override
    public void update(Admin admin) {
        // 如果前端传来空密码,则密码还是原来的密码
        if (!StringUtils.hasText(admin.getPassword())) {
            // 查询原来的密码
            String password = adminMapper.selectById(admin.getAid()).getPassword();
            admin.setPassword(password);
        }
        adminMapper.updateById(admin);
    }

    @Override
    public void delete(Integer id) {
        // 删除用户的所有角色
        adminMapper.deleteAdminAllRole(id);
        // 删除用户
        adminMapper.deleteById(id);
    }

    @Override
    public void updateStatus(Integer id) {
        Admin admin = adminMapper.selectById(id);
        admin.setStatus(!admin.isStatus());//状态取反
        adminMapper.updateById(admin);
    }

    @Override
    public Admin findById(Integer id) {
        return adminMapper.findById(id);
    }

    @Override
    public Page<Admin> search(int page, int size) {
        return adminMapper.selectPage(new Page<>(page, size), null);
    }

    @Override
    public void updateRoleToAdmin(Integer aid, Integer[] rids) {
        // 删除用户的所有角色
        adminMapper.deleteAdminAllRole(aid);
        // 重新添加管理员角色
        for (Integer rid : rids) {
            adminMapper.addRoleToAdmin(aid, rid);
        }
    }

    @Override
    public Admin findByName(String username) {
        QueryWrapper<Admin> wrapper = new QueryWrapper();
        wrapper.eq("username", username);
        Admin admin = adminMapper.selectOne(wrapper);
        return admin;
    }

    @Override
    public 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 {
    @Autowired
    private RoleMapper roleMapper;
    @Override
    public void add(Role role) {
        roleMapper.insert(role);
    }

    @Override
    public void update(Role role) {
        roleMapper.updateById(role);
    }

    @Override
    public void delete(Integer id) {
        // 删除角色
        roleMapper.deleteById(id);
        // 删除角色_权限中间表的相关数据
        roleMapper.deleteRoleAllPermission(id);
        // 删除用户_角色中间表的相关数据
        roleMapper.deleteRoleAllAdmin(id);
    }

    @Override
    public Role findById(Integer id) {
        return roleMapper.findById(id);
    }

    @Override
    public List<Role> findAll() {
        return roleMapper.selectList(null);
    }

    @Override
    public Page<Role> search(int page, int size) {
        return roleMapper.selectPage(new Page(page,size),null);
    }

    @Override
    public 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 {
    @Autowired
    private PermissionMapper permissionMapper;
    @Override
    public void add(Permission permission) {
        permissionMapper.insert(permission);
    }

    @Override
    public void update(Permission permission) {
        permissionMapper.updateById(permission);
    }

    @Override
    public void delete(Integer id) {
        // 删除权限
        permissionMapper.deleteById(id);
        // 删除角色_权限表中的相关数据
        permissionMapper.deletePermissionAllRole(id);
    }

    @Override
    public Permission findById(Integer id) {
        return permissionMapper.selectById(id);
    }

    @Override
    public List<Permission> findAll() {
        return permissionMapper.selectList(null);
    }

    @Override
    public 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 {
    @Autowired
    private AdminService adminService;
    @Autowired
    private 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 {
    @Autowired
    private 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 {
    @Autowired
    private 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.coloradmin.cn/o/1027715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

日主题RiPro主题高端美化/设计素材软件下载站专用子主题/美化包源码(升级版/免拓展)

主题简介 日主题RiPro主题高端美化/设计素材软件下载站专用子主题/美化包源码&#xff0c;这个子主题美化包无授权无暗链&#xff0c;不用再修改原主题代码&#xff0c;在用这个本美化包前要先下载最新ripro主题&#xff0c;本子主题有版本要求&#xff0c;仅支持RiPro8.0以上…

Api接口加密策略

接口安全要求&#xff1a; 1.防伪装攻击&#xff08;案例&#xff1a;在公共网络环境中&#xff0c;第三方 有意或恶意 的调用我们的接口&#xff09; 2.防篡改攻击&#xff08;案例&#xff1a;在公共网络环境中&#xff0c;请求头/查询字符串/内容 在传输过程被修改&#x…

什么是网络安全?网络安全包括哪几个方面?

提及网络安全&#xff0c;很多人都是既熟悉又陌生&#xff0c;所谓的熟悉就是知道网络安全可以保障网络服务不中断。那么到底什么是网络安全?网络安全包括哪几个方面?通过下文为大家介绍一下。 什么是网络安全? 网络安全是指网络系统的硬件、软件及系统中的数据受到保护&a…

无人直播设置必看:手机自动直播有哪些好处?

随着科技的不断发展&#xff0c;手机直播已经成为了人们生活中不可或缺的一部分。手机自动直播作为一种新兴的技术&#xff0c;为我们的生活带来了诸多便利。本文将从以下几个方面阐述手机自动直播的好处。 首先&#xff0c;手机自动直播可以节省时间和精力。传统的直播方式需…

c 语言开发

目录 IOS 开发&#xff1a;c、swift、object-c 第一节 终端生成.c 文件 ​编辑 第二节 常见的数据类型 第三节 运算符、scanf ​编辑 第四节&#xff1a;如何产生随机数 第五节&#xff1a;while 循环 第六节&#xff1a;goto 第七节&#xff1a;函数 ​编辑 第八节…

中移链交易模块介绍

中移链交易模块是中移链区块链系统的核心模块之一。它的主要作用是处理用户发起的交易请求&#xff0c;并将其打包成区块添加到区块链上。交易模块接收来自不同合约执行的指令&#xff0c;比如创建账号、转账、部署和执行智能合约等指令&#xff0c;并确保所有交易都是有效且合…

css实现Chrome标签栏

如图这是一个特殊的带有圆角的导航栏&#xff0c;实现这种效果并不难 这是我实现的效果&#xff1a; 淡一点的就是鼠标悬停的样式 以下是代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

python基于django或flask开发的健身俱乐部网站rix1z

本系统有三个角色&#xff1a;管理员、用户和教练&#xff0c;要求具备以下功能&#xff1a; &#xff08;1&#xff09;用户可以浏览主页了解健身课程、健身器材、会员卡信息、新闻公告等信息&#xff0c;并进行在线留言&#xff1b; &#xff08;2&#xff09;管理员通过后台…

Centos7安装nginx及网页如何放入nginx

Centos7安装nginx及网页如何放入nginx 安装所需的插件 安装gcc gcc是linux下的编译器在此不多做解释&#xff0c;感兴趣的小伙伴可以去查一下相关资料&#xff0c;它可以编译 C,C,Ada,Object C和Java等语言 查看版本 gcc -v如果出现下图就说明是你的Linux有centos 没有的话…

JWT 令牌撤销:中心化控制与分布式Kafka处理

【squids.cn】 全网zui低价RDS&#xff0c;免费的迁移工具DBMotion、数据库备份工具DBTwin、SQL开发工具等 令牌对于安全数字访问至关重要&#xff0c;但如果您需要撤销它们怎么办&#xff1f;尽管我们尽了最大努力&#xff0c;但有时代币可能会被泄露。这可能是由于编码错误、…

vue+springboot,easyexcel的excel文件下载

文章目录 1.效果展示1.1 前端界面1.2 下载的excel 2.思路介绍3.前端代码展示4.后端代码展示5.核心代码解释 1.效果展示 excel文件单一sheet&#xff0c;多sheet导出 本文主要介绍如何使用easyexcel &#xff0c;配合前端导出Excel文件。同时提供Excel的两种导出形式&#xff1a…

《扩散模型 从原理到实战》Hugging Face (二)

第二章 Hugging Face简介 本章无有效内容 第三章 从零开始搭建扩散模型 有时候&#xff0c;只考虑事情最简单的情况反而更有助于理解其工作原理。本章尝试从零开始搭建廓庵模型&#xff0c;我们将从一个简单的扩散模型讲起&#xff0c;了解其不同部分的工作原理&#xff0c;…

Learn Prompt-ChatGPT 精选案例:学习各国语言

过去&#xff0c;我们学语言需要花费很多时间来学习各种材料&#xff0c;再联系老师修改口语、作文等&#xff0c;十分费时费力。有了 ChatGPT 之后&#xff0c;我们就相当于有一个免费的&#xff0c;实时反馈的语言学习助手&#xff0c;大大节省了我们的时间。下面我将以英文的…

如何搭建游戏平台?

搭建游戏平台是一个复杂的任务&#xff0c;涉及多个方面的工作。下面是一些关键步骤和注意事项&#xff0c;以帮助您搭建游戏平台&#xff1a; 平台开发&#xff1a;开发游戏平台的关键部分&#xff0c;包括网站或应用程序的开发、数据库设计、用户界面设计、游戏上传和管理工具…

ipad触控笔有必要买原装吗?开学推荐平价好用的电容笔

在日常生活中&#xff0c;电容笔的用途非常广泛&#xff0c;无论是配上电脑&#xff0c;还是配上iPad平板&#xff0c;亦或是配上手机&#xff0c;都是非常不错的办公利器。首先要明确自己什么使用需求&#xff0c;然后才能选择适合自己需要的电容笔。苹果的Pencil拥有独一无二…

VIOOVI干货分享:什么是SOP?它的六要素是什么?

什么是SOP&#xff0c;SOP就是标准化的作业程序。它以文档的形式&#xff0c;详细的描述操作人员在生产操作过程中的操作步骤和应当遵守的事项&#xff1b;是操作人员的操作说明书&#xff1b;也是检查员指导工作的依据。 SOP的六要素是&#xff1a; 物料名称和数量&#xff1…

linux 解决发现不到的 内存占用率

1、问题浮现 项目做久了&#xff0c;你往往会遇到一些稀奇古怪的问题。下面咱就来聊聊关于内存无故使用率变大的真相。事情是这样的&#xff0c;最近一个客户的服务器&#xff0c;内存使用率在90%左右&#xff0c;这很不正常&#xff0c;导致某云的云安全中心一直报警&#xff…

Jenkins结合Gitlab,实现镜像构建及推送

docker-compose jenkins的docker-compose目录为为/home/jenkins&#xff0c;这个后面写脚本的时候需要对应上 version: 3 services:docker_jenkins:restart: alwaysimage: jenkins/jenkins:ltscontainer_name: docker_jenkinsprivileged: true ports:- 8080:8080- 50000:5000…

面试官:ES6中新增的Set、Map两种数据结构怎么理解?

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、Set 增删改查 add() delete() has() clear() 遍历 二、Map 增删改查 size set() get() has() del…

深度学习——线性神经网络二

深度学习——线性神经网络二 文章目录 前言一、softmax回归1.1. 分类问题1.2. 网络架构1.3. 全连接层的参数开销1.4. softmax运算1.5. 小批量样本的向量化1.6. 损失函数1.6.1. 对数似然1.6.2. softmax及其导数1.6.3. 交叉熵损失 1.7. 信息论基础1.7.1 熵1.7.2. 信息量1.7.3. 重…