SpringBoot + Vue 微人事权限组管理模块 (十四)

news2024/11/15 21:26:51

权限组前端页面制作

权限组管理角色和菜单之间关系,操作员管理着用户和角色之间的关系。
英文的输入框要有个前缀,SpringSecurity里角色英文名需要加一个ROLE_的前缀
在这里插入图片描述

在这里插入图片描述
上代码

   <div>
       <div class="permissManaTool">
        <el-input placeholder="请输入角色英文名" v-model="role.name">
            <template slot="prepend">ROLE_</template>
        </el-input>
         <el-input placeholder="请输入角色中文名" v-model="role.nameZh"></el-input>
      </div>
   </div>
 data(){
            return{
                role:{
                    name:"",
                    nameZh:"",
                }
            }
        }

添加按钮
在这里插入图片描述

           <el-button type="primary" size="small" icon="el-icon-plus">添加角色</el-button>

添加输入框样式
在这里插入图片描述

    .permissManaTool{
        display: flex;
        justify-content: flex-start;
    }
    .permissManaTool .el-input{
        width: 300px;
        margin-right: 8px;
    }

添加一个折叠面板
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/02579f78440e450db2497be5c21db539.png

![在这里插入图片描述](https://img-blog.csdnimg.cn/d5d150b440f7435ebae4f6a4d3287138.png
可以看出展开了第 2 个
在这里插入图片描述
留一个就够了
在这里插入图片描述
从数据库中获取所有的角色展示到页面,注意后端不仅要返回所有角色还要返回角色操作的菜单,角色能操作哪些资源也要返回

权限用户角色前后端对接

我们先来把所有角色查询出来,在前端展示出来

PermissController

@RestController
@RequestMapping("/system/basic/permiss")
public class PermissController {

    @Autowired
    RoleService roleService;

    @GetMapping("/")
    public List<Role> getAllRoles(){

        return roleService.getAllRoles();
    }
}

RoleService

@Service
public class RoleService {


    @Autowired
    RoleMapper roleMapper;
    public List<Role> getAllRoles(){

        return roleMapper.getAllRoles();
    }
}

RoleMapper

在这里插入图片描述

    List<Role> getAllRoles();

RoleMapper.xml

  <select id="getAllRoles" resultMap="BaseResultMap">
    select *
    from role;
  </select>

对接前端

在这里插入图片描述

 <div style="margin-top: 15px;width: 720px">
           <el-collapse accordion>
               <el-collapse-item  :title="item.namezh" :name="index"  v-for="(item,index) in roles" :key="index">
                   <div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div>
                   <div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div>
               </el-collapse-item>
           </el-collapse>
       </div>

在这里插入图片描述
在这里插入图片描述
展示效果
在这里插入图片描述
里面展示的内容应该是卡片
在这里插入图片描述
组件
在这里插入图片描述
在这里插入图片描述

  <div>
                      <el-card class="box-card">
                          <div slot="header" class="clearfix">
                              <span>卡片名称</span>
                              <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button>
                          </div>
                          <div v-for="o in 4" :key="o" class="text item">
                              {{'列表内容 ' + o }}
                          </div>
                      </el-card>
                  </div>

在这里插入图片描述
按钮样式改垃圾桶图标
在这里插入图片描述
在这里插入图片描述

 <el-button style="float: right; padding: 3px 0;color: #ff2a0c" type="text" icon="el-icon-delete"></el-button>

权限组菜单树展示

查询所有菜单展示树形结构,需要在服务端做处理返回
查询所有的父子类菜单,自己关联自己三次形成一张表,
在这里插入图片描述

select m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3 
 from menu m1,menu m2,menu m3 
where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true  
ORDER BY  m1.id,m2.id,m3.id```

### PermissController
![在这里插入图片描述](https://img-blog.csdnimg.cn/8bf2e5f06fc647038f6066e6603dfa49.png)

```java
@RestController
@RequestMapping("/system/basic/permiss")
public class PermissController {

    @Autowired
    RoleService roleService;

    @Autowired
    MenuService menuService;

    @GetMapping("/")
    public List<Role> getAllRoles(){

        return roleService.getAllRoles();
    }

    @PostMapping("/menus")
    public List<Menu> getAllMenus(){
        return menuService.getAllMenus();
    }
}

MenuService

在这里插入图片描述

@Service
public class MenuService {

    @Autowired
    MenuMapper menuMapper;
    public RespBean getMenusByHrId() {
      return RespBean.ok("操作成功!",menuMapper.getMenusByHrId( ((Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId()));//Id从哪里来呢,前端传过来的信息是不可信,我们登录的用户信息保存在security,可以从Security里获取登录用户信息
    }

    /**
     * 获取所有的菜单角色   一对多 一个菜单项有多个角色
     * @return
     */
//    @Cacheable
    public List<Menu> getAllMenusWithRole(){
        return menuMapper.getAllMenusWithRole();
    }

    public List<Menu> getAllMenus() {
        return menuMapper.getAllMenus();
    }
}

MenuMapper

在这里插入图片描述

   List<Menu> getAllMenus();

MenuMapper.xml

一个父菜单有多个子菜单,子菜单中还有菜单,三级菜单,直接查询
如果不确认多少级菜单可以用递归
在这里插入图片描述

  <resultMap id="MenuWithChildren" type="com.xyg.pojo.Menu" extends="BaseResultMap">
    <id column="id1" property="id"></id>
    <result column="name1" property="name"></result>
    <collection property="children" ofType="com.xyg.pojo.Menu">
      <id column="id2" property="id"></id>
      <result column="name2" property="name"></result>
      <collection property="children" ofType="com.xyg.pojo.Menu">
        <id column="id3" property="id"></id>
        <result column="name3" property="name"></result>
      </collection>
    </collection>
  </resultMap>

  <select id="getAllMenus" resultMap="MenuWithChildren">
    select m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3
    from menu m1,menu m2,menu m3
    where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true
    ORDER BY  m1.id,m2.id,m3.id  
    </select>

测试
在这里插入图片描述

前端

在这里插入图片描述
拷贝过来
在这里插入图片描述
定义对应的变量
在这里插入图片描述
添加一个折叠面板的点击事件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
进行请求后端加载数据
在这里插入图片描述

   change(name){
                if (name){
                    this.getAllMenus();//点击有id就执行
                }
            },
   getAllMenus(){
                this.postRequest("/system/basic/permiss/menus").then(resp=>{
                    if(resp){
                        console.log(resp)
                        this.allmenus=resp
                    }
                })
            },

添加多选框
在这里插入图片描述
展示效果
在这里插入图片描述

菜单角色关系修改

角色全部展示出来了,还差个预选中的问题,就是选中角色可以操作哪写菜单
看数据库有个menu_role 菜单角色关联表 ,根据角色id查询可以操作哪写菜单,把角色可以操作菜单的id查询出来。
使用组件
在这里插入图片描述
在这里插入图片描述
写死数据看一默认选择效果
在这里插入图片描述
展示效果
在这里插入图片描述
把写死的数据服务端返回的数据动态的修改,可以根据角色rid查询菜单mid就行了

PermissController

    @GetMapping("/mids/{rid}")
    public List<Integer>  getMidsByTid(@PathVariable  Integer rid){
        return menuService.getMidsByTid(rid);
    }

menuMapper

    public  List<Integer> getMidsByTid(Integer rid) {
        return menuMapper.getMidsByTid(rid);
    }

MenuMapper

List<Integer> getMidsByTid(Integer rid);

MenuMapper.xml


  <select id="getMidsByTid" resultType="integer">
    select mid from menu_role where rid=#{rid}
  </select>

对接前端

需要name参数绑定角色id
在这里插入图片描述

在这里插入图片描述
分别通过default-expanded-keys和default-checked-keys设置默认展开和默认选中的节点。需要注意的是,此时必须设置node-key,其值为节点数据中的一个字段名,该字段在整棵树中是唯一的。

在这里插入图片描述
对接后端
在这里插入图片描述
点击事件chance,传参角色id,调用getSelectedMenus把角色id传过去,查询菜单的id赋值selectedMenus数组,tree进行默认预选中多选框

 change(rid){
                if (rid){
                    this.getAllMenus();//点击有id就执行
                    this.getSelectedMenus(rid)
                }
            },
            getSelectedMenus(rid){
                this.getRequest("/system/basic/permiss/mids/"+rid).then(resp=>{
                    if (resp){
                        this.selectedMenus=resp
                    }
                })
            },

菜单角色关系修改

在这里插入图片描述
可以引用通过ref=“tree” 获取该组件元素在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
getCheckedKeys 方法 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点的 key 所组成的数组,(leafOnly) 接收一个 boolean 类型的参数,若为 true 则仅返回被选中的叶子节点的 keys,默认值为 false
在这里插入图片描述
打印出来看一下
在这里插入图片描述
在这里插入图片描述

        methods:{
            doUpdate(rid,index){
              console.log(rid)
               let tree = this.$refs.tree[index];//返回当前选中的元素
              let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,若为true就返回叶子节点也就是子节点
                console.log(selectedKeys)
            },

在这里插入图片描述

编写修改操作后端接口

这里的更新操作有点麻烦,比如用户## 权限组前端页面制作
权限组管理角色和菜单之间关系,操作员管理着用户和角色之间的关系。英文的输入框要有个前缀,SpringSecurity里角色英文名需要加一个ROLE_的前缀在这里插入图片描述在这里插入图片描述上代码bash <div> <div class="permissManaTool"> <el-input placeholder="请输入角色英文名" v-model="role.name"> <template slot="prepend">ROLE_</template> </el-input> <el-input placeholder="请输入角色中文名" v-model="role.nameZh"></el-input> </div> </div>``````bash data(){ return{ role:{ name:"", nameZh:"", } } }添加按钮在这里插入图片描述bash <el-button type="primary" size="small" icon="el-icon-plus">添加角色</el-button>添加输入框样式在这里插入图片描述bash .permissManaTool{ display: flex; justify-content: flex-start; } .permissManaTool .el-input{ width: 300px; margin-right: 8px; }添加一个折叠面板在这里插入图片描述![在这里插入图片描述](https://img-blog.csdnimg.cn/02579f78440e450db2497be5c21db539.png![在这里插入图片描述](https://img-blog.csdnimg.cn/d5d150b440f7435ebae4f6a4d3287138.png可以看出展开了第 2 个 在这里插入图片描述留一个就够了在这里插入图片描述从数据库中获取所有的角色展示到页面,注意后端不仅要返回所有角色还要返回角色操作的菜单,角色能操作哪些资源也要返回## 权限用户角色前后端对接我们先来把所有角色查询出来,在前端展示出来### PermissController java@RestController@RequestMapping("/system/basic/permiss")public class PermissController { @Autowired RoleService roleService; @GetMapping("/") public List<Role> getAllRoles(){ return roleService.getAllRoles(); }}### RoleService java@Servicepublic class RoleService { @Autowired RoleMapper roleMapper; public List<Role> getAllRoles(){ return roleMapper.getAllRoles(); }}### RoleMapper在这里插入图片描述java List<Role> getAllRoles();### RoleMapper.xmlxml <select id="getAllRoles" resultMap="BaseResultMap"> select * from role; </select>### 对接前端在这里插入图片描述bash <div style="margin-top: 15px;width: 720px"> <el-collapse accordion> <el-collapse-item :title="item.namezh" :name="index" v-for="(item,index) in roles" :key="index"> <div>与现实生活一致:与现实生活的流程、逻辑保持一致,遵循用户习惯的语言和概念;</div> <div>在界面中一致:所有的元素和结构需保持一致,比如:设计样式、图标和文本、元素的位置等。</div> </el-collapse-item> </el-collapse> </div>在这里插入图片描述在这里插入图片描述展示效果在这里插入图片描述里面展示的内容应该是卡片在这里插入图片描述组件在这里插入图片描述在这里插入图片描述bash <div> <el-card class="box-card"> <div slot="header" class="clearfix"> <span>卡片名称</span> <el-button style="float: right; padding: 3px 0" type="text">操作按钮</el-button> </div> <div v-for="o in 4" :key="o" class="text item"> {{'列表内容 ' + o }} </div> </el-card> </div>在这里插入图片描述按钮样式改垃圾桶图标在这里插入图片描述在这里插入图片描述bash <el-button style="float: right; padding: 3px 0;color: #ff2a0c" type="text" icon="el-icon-delete"></el-button>## 权限组菜单树展示查询所有菜单展示树形结构,需要在服务端做处理返回查询所有的父子类菜单,自己关联自己三次形成一张表,在这里插入图片描述sqlselect m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3 from menu m1,menu m2,menu m3 where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true ORDER BY m1.id,m2.id,m3.id### PermissController在这里插入图片描述java@RestController@RequestMapping("/system/basic/permiss")public class PermissController { @Autowired RoleService roleService; @Autowired MenuService menuService; @GetMapping("/") public List<Role> getAllRoles(){ return roleService.getAllRoles(); } @PostMapping("/menus") public List<Menu> getAllMenus(){ return menuService.getAllMenus(); }}### MenuService在这里插入图片描述java@Servicepublic class MenuService { @Autowired MenuMapper menuMapper; public RespBean getMenusByHrId() { return RespBean.ok("操作成功!",menuMapper.getMenusByHrId( ((Hr) SecurityContextHolder.getContext().getAuthentication().getPrincipal()).getId()));//Id从哪里来呢,前端传过来的信息是不可信,我们登录的用户信息保存在security,可以从Security里获取登录用户信息 } /** * 获取所有的菜单角色 一对多 一个菜单项有多个角色 * @return */// @Cacheable public List<Menu> getAllMenusWithRole(){ return menuMapper.getAllMenusWithRole(); } public List<Menu> getAllMenus() { return menuMapper.getAllMenus(); }}### MenuMapper在这里插入图片描述java List<Menu> getAllMenus();### MenuMapper.xml一个父菜单有多个子菜单,子菜单中还有菜单,三级菜单,直接查询如果不确认多少级菜单可以用递归在这里插入图片描述xml <resultMap id="MenuWithChildren" type="com.xyg.pojo.Menu" extends="BaseResultMap"> <id column="id1" property="id"></id> <result column="name1" property="name"></result> <collection property="children" ofType="com.xyg.pojo.Menu"> <id column="id2" property="id"></id> <result column="name2" property="name"></result> <collection property="children" ofType="com.xyg.pojo.Menu"> <id column="id3" property="id"></id> <result column="name3" property="name"></result> </collection> </collection> </resultMap> <select id="getAllMenus" resultMap="MenuWithChildren"> select m1.id as id1,m1.name as name1,m2.id as id2,m2.name as name2,m3.id as id3,m3.name as name3 from menu m1,menu m2,menu m3 where m1.id = m2.parentId and m2.id =m3.parentId and m3.enabled = true ORDER BY m1.id,m2.id,m3.id </select>测试在这里插入图片描述## 前端在这里插入图片描述拷贝过来在这里插入图片描述定义对应的变量在这里插入图片描述添加一个折叠面板的点击事件在这里插入图片描述在这里插入图片描述在这里插入图片描述进行请求后端加载数据在这里插入图片描述java change(name){ if (name){ this.getAllMenus();//点击有id就执行 } }, getAllMenus(){ this.postRequest("/system/basic/permiss/menus").then(resp=>{ if(resp){ console.log(resp) this.allmenus=resp } }) },添加多选框在这里插入图片描述展示效果在这里插入图片描述## 菜单角色关系修改角色全部展示出来了,还差个预选中的问题,就是选中角色可以操作哪写菜单看数据库有个menu_role 菜单角色关联表 ,根据角色id查询可以操作哪写菜单,把角色可以操作菜单的id查询出来。使用组件在这里插入图片描述在这里插入图片描述写死数据看一默认选择效果在这里插入图片描述展示效果在这里插入图片描述把写死的数据服务端返回的数据动态的修改,可以根据角色rid查询菜单mid就行了### PermissControllerjava @GetMapping("/mids/{rid}") public List<Integer> getMidsByTid(@PathVariable Integer rid){ return menuService.getMidsByTid(rid); }### menuMapperjava public List<Integer> getMidsByTid(Integer rid) { return menuMapper.getMidsByTid(rid); }### MenuMapperjavaList<Integer> getMidsByTid(Integer rid);MenuMapper.xmlxml <select id="getMidsByTid" resultType="integer"> select mid from menu_role where rid=#{rid} </select>### 对接前端需要name参数绑定角色id在这里插入图片描述在这里插入图片描述分别通过default-expanded-keys和default-checked-keys设置默认展开和默认选中的节点。需要注意的是,此时必须设置node-key,其值为节点数据中的一个字段名,该字段在整棵树中是唯一的。在这里插入图片描述对接后端在这里插入图片描述点击事件chance,传参角色id,调用getSelectedMenus把角色id传过去,查询菜单的id赋值selectedMenus数组,tree进行默认预选中多选框java change(rid){ if (rid){ this.getAllMenus();//点击有id就执行 this.getSelectedMenus(rid) } }, getSelectedMenus(rid){ this.getRequest("/system/basic/permiss/mids/"+rid).then(resp=>{ if (resp){ this.selectedMenus=resp } }) },### 菜单角色关系修改在这里插入图片描述 可以引用通过ref=“tree” 获取该组件元素在这里插入图片描述在这里插入图片描述在这里插入图片描述getCheckedKeys 方法 若节点可被选择(即 show-checkbox 为 true),则返回目前被选中的节点的 key 所组成的数组,(leafOnly) 接收一个 boolean 类型的参数,若为 true 则仅返回被选中的叶子节点的 keys,默认值为 false在这里插入图片描述打印出来看一下在这里插入图片描述在这里插入图片描述java methods:{ doUpdate(rid,index){ console.log(rid) let tree = this.$refs.tree[index];//返回当前选中的元素 let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,若为true就返回叶子节点也就是子节点 console.log(selectedKeys) },在这里插入图片描述### 编写修改操作后端接口这里的更新操作有点麻烦,比如用户勾选了几个,有取消了几个,有点麻烦后台要一个一个判断,这里就直接删除原有的,直接更新操作

PermissController

    @PutMapping("/")
    public RespBean updateMenuRole(Integer rid,Integer[] mids){
        if(menuService.updateMenuRole(rid,mids)){
             return RespBean.ok("更新成功");
        }
        return RespBean.err("更新失败");
    }

MenuService

    @Transactional
    public boolean updateMenuRole(Integer rid, Integer[] mids) {
        menuRoleMapper.deleteById(rid);
        Integer result=menuRoleMapper.insertRecord(rid,mids);
        return result==mids.length;
    }

MenuRoleMapper

    void deleteById(Integer rid);

    Integer insertRecord(@Param("rid") Integer rid,@Param("mids") Integer[] mids);

MenuRoleMapper.xml

  <delete id="deleteById">
    delete from menu_role where rid=#{rid}
  </delete>

  <insert id="insertRecord">
    insert into  menu_role (mid,rid) values
    <foreach collection="mids" separator="," item="mid">
      (#{mid},#{rid})
    </foreach>
  </insert>

对接前端

doUpdate(rid,index){
               let tree = this.$refs.tree[index];//返回当前选中的元素
               let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,为true就获取子节点
                let url='/system/basic/permiss/?rid='+rid
                selectedKeys.forEach(key=>{
                    url +='&mids='+key;
                    console.log(url)
                })

                this.putRequest(url).then(resp=>{
                    if(resp){
                        this.getRolesAll()
                    }
                })
            },

在这里插入图片描述
控制面板绑定一个属性
在这里插入图片描述
赋值-1,就是谁都不展示
在这里插入图片描述
在这里插入图片描述
activeName他的值是等于如图里name值,就会展示,等于-1就没有对应的值就不展示
在这里插入图片描述

 doUpdate(rid,index){
               let tree = this.$refs.tree[index];//返回当前选中的元素
               let selectedKeys = tree.getCheckedKeys(true)//getCheckedKeys方法获取选中菜单节点的key值就是菜单id,为true就获取子节点
                let url='/system/basic/permiss/?rid='+rid
                selectedKeys.forEach(key=>{
                    url +='&mids='+key;
                    console.log(url)
                })

                this.putRequest(url).then(resp=>{
                    if(resp){
                        this.getRolesAll()
                        this.activeName=-1
                    }
                })
            },

取消修改一样就不展示
在这里插入图片描述
在这里插入图片描述

 cancelUpdate(){
                this.activeName=-1
            },

权限组角色添加

PermissController

    @PostMapping("/role")
    public RespBean addRole(@RequestBody Role role){
        if(roleService.addRole(role)==1){
            return RespBean.ok("添加成功");
        }

        return RespBean.err("添加失败");
    }

RoleService

因为SpringSecurity的角色需要以ROLE开头数据

    public Integer addRole(Role role) {

        if(!role.getName().startsWith("ROLE_")){
            role.setName("ROLE"+role.getName());
        }
        return roleMapper.insert(role);
    }

使用逆向工程工具生成的mapper

在这里插入图片描述

添加角色接口对接前端

在这里插入图片描述
在这里插入图片描述
判断输入框数据是否为空,不为空就执行后端接口
在这里插入图片描述

权限组角色删除

PermissController

    @DeleteMapping("/")
    public RespBean deletePositionByIds(Integer[] ids){
        if(positionsService.deletePositionsByIds(ids)==ids.length){
            return RespBean.ok("删除成功");
        }
        return RespBean.err("删除失败");
    }

PositionsService

    public int deletePositionsByIds(Integer[] ids) {
        return positionMapper.deletePositionsByIds(ids);
    }

RoleMapper

在这里插入图片描述

删除对接前端

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

数据可视化-canvas-svg-Echarts

数据可视化 技术栈 canvas <canvas width"300" height"300"></canvas>当没有设置宽度和高度的时候&#xff0c;canvas 会初始化宽度为 300 像素和高度为 150 像素。切记不能通过样式去设置画布的宽度与高度宽高必须通过属性设置&#xff0c;…

【李沐】3.2线性回归从0开始实现

%matplotlib inline import random import torch from d2l import torch as d2l1、生成数据集&#xff1a; 看最后的效果&#xff0c;用正态分布弄了一些噪音 上面这个具体实现可以看书&#xff0c;又想了想还是上代码把&#xff1a; 按照上面生成噪声&#xff0c;其中最后那…

韩顺平Linux 四十四--

四十四、rwx权限 权限的基本介绍 输入指令 ls -l 显示的内容如下 -rwxrw-r-- 1 root 1213 Feb 2 09:39 abc0-9位说明 第0位确定文件类型&#xff08;d , - , l , c , b) l 是链接&#xff0c;相当于 windows 的快捷方式- 代表是文件是普通文件d 是目录&#xff0c;相…

【java毕业设计】基于ssm+mysql+jsp的社区生活超市管理系统设计与实现(程序源码)-社区生活超市管理系统

基于ssmmysqljsp的社区生活超市管理系统设计与实现&#xff08;程序源码毕业论文&#xff09; 大家好&#xff0c;今天给大家介绍基于ssmmysqljsp的社区生活超市管理系统设计与实现&#xff0c;本论文只截取部分文章重点&#xff0c;文章末尾附有本毕业设计完整源码及论文的获取…

webshell绕过

文章目录 webshell前置知识进阶绕过 webshell 前置知识 <?phpecho "A"^""; ?>运行结果 可以看到出来的结果是字符“&#xff01;”。 为什么会得到这个结果&#xff1f;是因为代码的“A”字符与“”字符产生了异或。 php中&#xff0c;两个变…

系统架构设计专业技能 · 系统工程与系统性能

系列文章目录 系统架构设计专业技能 网络技术&#xff08;三&#xff09; 系统架构设计专业技能 系统安全分析与设计&#xff08;四&#xff09;【系统架构设计师】 系统架构设计高级技能 软件架构设计&#xff08;一&#xff09;【系统架构设计师】 系统架构设计高级技能 …

7-10 最佳情侣身高差

分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 专家通过多组情侣研究数据发现&#xff0c;最佳的情侣身高差遵循着一个公式&#xff1a;&#xff08;女方的身高&#xff09;1.09 &#xff08;男方的身高&#xff09;。如果符合&#xff0c;你俩的身高差不管是牵手…

Shell脚本基础( 四: sed编辑器)

目录 1 简介 1.1 sed编辑器的工作流程 2 sed 2.1 基本用法 2.2 sed基本格式 2.2.1 sed支持正则表达式 2.2.2 匹配正则表达式 2.2.3 奇数偶数表示 2.2.4 -d选项删除 2.2.5 -i修改文件内容 2.2.6 -a 追加 2.3 搜索替代 2.4 变量 1 简介 sed是一种流编辑器&#xff0c;…

我能“C”——数据的存储

目录 1. 数据类型介绍 1.1 类型的基本归类&#xff1a; 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习 3. 浮点型在内存中的存储 3.1 一个例子 3.2 浮点数存储规则 1. 数据类型介绍 char // 字符数据类型 short // 短整…

linux字符设备

目录 设计字符设备 文件系统调用系统IO的内核处理过程 硬件层原理 驱动层原理 文件系统层原理 设备号的组成与哈希表 Hash Table&#xff08;哈希表、散列表&#xff0c;数组和链表的混合使用&#xff09; 设备号管理 关键的数据结构&#xff1a;char_device_struct&a…

Python应用工具-Jupyter Notebook

工具简介 Jupyter Notebook是 基于 网页的用于交互计算的 应用程序&#xff0c;以网页的形式打开&#xff0c;可以在网页页面中直接编写代码和运行代码&#xff0c;代码的运行结果也会直接在代码块下 显示&#xff0c;文档是保存为后缀名为 . ipynb 的 JSON 格式文件。 操作指令…

学习笔记:Opencv实现限制对比度得自适应直方图均衡CLAHE

2023.8.19 为了完成深度学习的进阶&#xff0c;得学习学习传统算法拓展知识面&#xff0c;记录自己的学习心得 CLAHE百科&#xff1a; 一种限制对比度自适应直方图均衡化方法&#xff0c;采用了限制直方图分布的方法和加速的插值方法 clahe&#xff08;限制对比度自适应直方图…

AI搜索引擎助力科学家创新

开发者希望通过帮助科学家从大量文献中发现联系从而解放科学家&#xff0c;让他们专注于发现和创新。 图片来源&#xff1a;The Project Twins 对于专注于历史的研究者Mushtaq Bilal来说&#xff0c;他在未来科技中投入了大量时间。 Bilal在丹麦南部大学&#xff08; Universit…

畅享个性海报创作——探索免费开源的在线自动生成海报项目魅力

我们的生活越来越离不开各种创意和宣传&#xff0c;而其中一个常见的需求就是制作精美的海报。然而&#xff0c;对许多人来说&#xff0c;制作海报可能并不是一件轻松的事情&#xff0c;往往需要专业的设计技能或者花费不少时间去请人帮忙。今天了我给大家介绍一款开源的可私有…

SQL助你面大厂(连续N天登录)

在腾讯、网易或者一些游戏类大厂中&#xff0c;他们经常关注的就是用户上线人数以及天数&#xff0c;那么给我们一个数据库&#xff0c;我们怎么样才能快速的查询那个用户的连续N天登录&#xff1f; 那我们用案例来说明&#xff0c;再多的语言在现实面前总是那么苍白无力&…

mongodb 数据库管理(数据库、集合、文档)

目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1&#xff09;update() 方法 2&#xff09;replace() 方法 一、数据库操作 1、创建数据库 创建数据库…

HCIP——VLAN实验2

一.实验要求 1.PC1/3的接口均为access模式&#xff0c;且属于van2&#xff0c;在同一网段 2.PC2/4/5/6的IP地址在同一网段&#xff0c;与PC1/3不在同一网段 3.PC2可以访问4/5/6&#xff0c;PC4不能访问5/6&#xff0c;PC5不能访问PC6 4.所有PC通过DHCP获取ip地址&#xff0c;PC…

第 7 章 排序算法(1)

7.1排序算法的介绍 排序也称排序算法(Sort Algorithm)&#xff0c;排序是将一组数据&#xff0c;依指定的顺序进行排列的过程。 7.2排序的分类&#xff1a; 内部排序: 指将需要处理的所有数据都加载到**内部存储器(内存)**中进行排序。外部排序法&#xff1a; 数据量过大&am…

深入探索:Kali Linux 网络安全之旅

目录 前言 访问官方网站 导航到下载页面 启动后界面操作 前言 "Kali" 可能指的是 Kali Linux&#xff0c;它是一种基于 Debian 的 Linux 发行版&#xff0c;专门用于渗透测试、网络安全评估、数字取证和相关的安全任务。Kali Linux 旨在提供一系列用于测试网络和…

【数据结构】吃透单链表!!!(详细解析~)

目录 前言&#xff1a;一.顺序表的缺陷 && 介绍链表1.顺序表的缺陷2.介绍链表&#xff08;1&#xff09;链表的概念&#xff08;2&#xff09;链表的结构&#xff08;3&#xff09;链表的功能 二.单链表的实现1.创建节点的结构2.头文件函数的声明3.函数的实现&#xff…