存放日常开发所撰写的Markdown文件。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

14 KiB

路径格式

http://****/user/

请求格式

{ // 请求体[注册]
  "Cookie": null,
  "imagecode": null,
  "data": {
    "name": "liqiang",
    "iphone": "1231231231",
    "password": "ssdfsf333"
  },
  "token": null
}

{ // 响应体
  "code": 200,
  "msg": "access",
  "token": null,
  "data": null
}

// ----------------------------------
// 上面的是登录的响应体,下面是各个操作的统一响应体。

{// 各个操作的响应体
  "code": 200,
  "msg": "成功!"
}

{// 添加(修改、删除)部门
  "token": null,
  "data":{
    "sectorName": "人力部",
    "sectorNumber": "HR001",
    "sectorDiscript": "负责管理人员的部门"
  }
}

{// 添加(修改、删除)人员
  "token": null,
  "data": {
    "name": "张三",
    "workId": "HR01N001",
    "sectorType": "HR001",
    "workStatus": "在编",
    "sex": "男",
    "birthday": "2001-09-25",
    "image": null
  }
}

{// 添加(修改、删除)资产类别
  "token": null,
  "data": {
    "assetTypeName": "手机",
    "assetTypeNumber": "IP001"
  }
}

{// 添加(修改)品牌
  "token": null,
  "data":{
  	"brandName": "晨光",
  	"brandDescription": "晨光品牌产品"
  }
}

{// 添加(修改)获取方式
  "token": null,
  "data": {
    "methodName": "购买",
    "methodNumber": "MT001"
  }
}

{// 添加(修改)厂商
  "token": null,
  "data": {
  	"vendorName": "广东中山理丹电子有限科技公司",
  	"vendorType": "生产商",
  	"vendorPeople": "王经理",
  	"vendorIphone": "122312313",
  	"vendorAddress": "广东中山市南区城南街道102-1号",
  	"vendorCommit": ""
  }
}

{// 添加(修改)存放地址
  "token": null,
  "data": {
  	"saveAddress": "厂库1",
  	"saveCommit": ""
  }
}

{// 添加(修改)设备用途
  "token": null,
  "data":{
    "dirverNumber": "D001",
    "dirverUse": "生产",
    "dirverCommit": ""
  }
}

{// 添加(修改)报销方式
	"token": null,
  "data": {
    "repairNumber": "R001",
    "repairName": "变卖",
    "repariCommit": ""
  }
}

{// 修改个人信息
  "token": null,
  "iphone": ""
}

{// 申购
  "token": null,
  "data": {
    "PurchaseAsset": "申购资产1",
    "PurchaseType": "办公资料",
    "PurchasePeople": "软经理",
    "PurchaseNumber": "3",
    "Estimatedprice": "",
    "dirverUse": "办公",
    "assetImage": "",
    "PurchaseAdvice": "",
    "PurchaseDate": "2001-10-22",
    "PurchaseReason": ""
  }
}

{// 资产登记 【除了编号不能修改,其余都可以修改】
  "token": null,
  "data":{
    "assetName": "资产1",
    "assetNumber": "Z0001",
    "assetType": "",
    "vendorName": "",
    "brandName": "",
    "methodName": "",
    "inboundTime": "2023-02-13",
    "saveAddress": "ssssss",
    "assetImage": ""
  }
}

IDEA

数据库查询记录

# -----------------------------------------------------------
# 通用操作

# 查询所有表
show tables ;

# 分别查看各个表结构
# 人员表
desc userinfo;
# 管理员表
desc users;
# 部门表
desc work;
# 资产类别表
desc assettype;
# 品牌表
desc brand;
# 存放地点表
desc saveasset;
# 设备用途表
desc driveruse;
# 供应厂商表
desc vendors;
# 取得方式表
desc getmethod;

# play 1
# -----------------------------------------------------------
# 用户---角色---权限
# 这个方案,表太对,查询起来语句过于太长,容易混乱。

# 用户表
# 其中,用户表关联人员管理表
# Name 可以关联到 userinfo表中的 workid
create table users (
    id int primary key,
    name varchar(10) comment '用户名',
    password varchar(10) comment '密码',
    iphone varchar(11) comment '手机号',
    loginDate timestamp comment '登录时间',
    loginNumber int comment '登录次数',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# 角色表
# 用来关联用户,当然也可以设计关联到部门或者是其他表
create table role(
    id int primary key ,
    name varchar(5) comment '角色名',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# 权限表
# 管理用户的访问权限和操作权限
create table permission(
    id int primary key ,
    name varchar(5) comment '权限名称',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# 关联表1【权限---角色】
create table role_permission(
    id int primary key auto_increment,
    roleId int comment '角色ID',
    permissionId int comment '权限ID',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# 关联表2【用户---角色】
# 将用户和角色关联起来
create table users_role(
    id int primary key ,
    userId int,
    roleId int,
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# operation表
create table operation(
    id int primary key auto_increment,
    name varchar(50) comment '操作名称',
    permissionId int comment '权限ID',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# 关联表2【操作---权限】
# 将操作和权限关联起来
create table operation_permission(
    id int primary key auto_increment,
    operationId int comment '操作ID',
    permissionId int comment '权限ID',
    url varchar(20) comment '操作路由',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# menu表
create table menu(
    id int auto_increment primary key ,
    name varchar(50) comment 'menu名称',
    permissionId int comment '权限ID',
    url varchar(20) comment '菜单路由路径',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

# 关联表3
# 将菜单和权限关联起来
create table menu_permission(
    id int primary key auto_increment,
    menuId int comment '菜单ID',
    permissionId int comment '权限ID',
    createDate timestamp,
    updateDate timestamp
)character set = UTF8MB4;

create table userinfo(
    id int primary key auto_increment,
    username varchar(255) comment '用户姓名',
    workid varchar(10) comment '工号',
    sex varchar(10) comment '性别',
    birthdate timestamp comment '出生日期',
    work varchar(20) comment '部门',
    worktype varchar(255) comment '人员类别'
)character set = UTF8MB4;

# 创建外键
# 语法:ALTER TABLE  ADD CONSTRAINT  FOREIGN KEY() REFERENCES ();

# users ---- useinfo 外键
# alter table users add constraint uu foreign key(name) references userinfo(workid);

# users ---- Users_role 外键
# alter table users_role add constraint ur1 foreign key (userId) references users(id);

# role ---- User_role 外键
# alter table users_role add constraint ur2 foreign key (roleId) references role(id);

# 查看表结构
show create table userinfo;
show create table users;
show create table users_role;
show create table role_permission;

# 查询用户并迁移用户表
# 账号
# 655797409
# 64814479
# 136323636
# 683697414
# 226294130

# 手机号
# 18690845798
# 18645353951
# 18133455490
# 18154254833
# 18698275149

# 密码
# 4r%JNr&oU
# #!yraOI7
# HziqpyeW
# p5IHkJ47
# I41V3H0M

# -----------------------------------------------------------
# 超级管理员角色所负责的表

# 更改表名
# rename table  to ;

# 删除表
# drop table useinfo;

# 创建资产类别表
create table assettype (
    id int primary key auto_increment,
    assetTypeNumber varchar(20) comment '资产类别编号',
    assetTypeName varchar(20) comment '资产类别名称',
    assetTypeStatus varchar(10) comment '资产类别状态',
    assetTypeCreateDate datetime comment '创建时间'
)character set = UTF8MB4;

# 创建取得方式表
create table getmethod(
    id int primary key auto_increment,
    methodNumber varchar(20) comment '取得方式编码',
    methodName varchar(20) comment '取得方式名称',
    methodStatus varchar(10) comment '取得方式状态',
    methodCreateDate datetime comment '创建时间'
)character set = UTF8MB4;

# 创建厂商表
create table vendors(
    id int primary key auto_increment,
    vendorName varchar(20) comment '供应厂商名称',
    vendorType varchar(10) comment '供应厂商类型',
    vendorStatus varchar(10) comment '供应厂商状态',
    vendorPeople varchar(5) comment '供应厂商联系人',
    vendorIphone varchar(11) comment '供应厂商联系人号码',
    vendorCreateDate datetime comment '创建时间'
)character set = UTF8MB4;
# 创建仓库表
create table saveasset(
    id int primary key auto_increment,
    saveAddress varchar(20) comment '存放地点名称',
    saveStatus varchar(10) comment '存放地点状态',
    saveCommit varchar(50) comment '备注',
    saveCreateDate datetime comment '创建时间'
)character set = UTF8MB4;
# 创建设备用途表
create table driveruse(
    id int primary key auto_increment,
    driverNumber varchar(20) comment '设备用途编号',
    driverName varchar(20) comment '设备用途名称',
    driverStatus varchar(10) comment '状态',
    driverCommit varchar(50) comment '备注',
    driverCreateDate datetime comment '创建时间'
)character set = UTF8MB4;
# 创建品牌表
create table brand(
    id int primary key auto_increment,
    brandName varchar(20) comment '品牌名称',
    brandDescription varchar(50) comment '品牌说明',
    brandStatus varchar(10) comment '状态',
    brandCreateDate datetime comment '创建时间'
)character set = UTF8MB4;

# 创建报废方式表
create table repairs(
    id int primary key auto_increment,
    repairNumber varchar(20) comment '报废方式编号',
    repairName varchar(10) comment '报废方式名称',
    repairStatus varchar(10) comment '报废方式状态',
    repairCommit varchar(100) comment '备注',
    createDate timestamp comment '创建时间',
    updateDate timestamp comment '更新时间'
)character set = UTF8MB4;

# play 2
# -----------------------------------------------------------
# 最新的四表分层权限结构。
# 该方案,可将分层权限结构缩小至四个表格。减少了查询语句的长度。逻辑不容易混乱。

# 用户
create table users(
    id int primary key auto_increment, # 自动递增主键
    name varchar(244),
    password varchar(244),
    rolesid int, # 外键 关联角色的ID
    createdate timestamp,
    updatedate timestamp
) character set = UTF8MB4;
# 角色
create table roles(
    id int not null default 0 , # 主键 默认0
    name varchar(30),
    permissionid int not null auto_increment, # 非主键 约束唯一索引 自动递增 并 外键 关联 permission 的ID
    createdate timestamp,
    updatedate timestamp,
    primary key (`id`),
    unique key (`permissionid`)
)character set = UTF8MB4;
# 权限表
create table permission(
    id int primary key auto_increment, # 自动递增主键
    rolesid int,
    name varchar(20),
    operationid int, # 外键 关联operation的ID
    createdate timestamp,
    updatedate timestamp
)character set = UTF8MB4;
# menu操作权限访问模块表
create table operation(
    id int primary key , # 主键 非自动递增
    name varchar(20),
    url varchar(20),
    createdate timestamp,
    updatedate timestamp
)character set = UTF8MB4;

# 用户---角色的外键
alter table users add constraint ur foreign key (rolesid) references roles(id);
# 角色---权限 & 权限---menu访问模块 的外键。
alter table permission add constraint op foreign key (operationid) references operation(id);
alter table permission add constraint pr foreign key (rolesid) references roles(id);

# -----------------------------------------------------------
# 资产管理员角色所负责的表

# 创建资产申购表

# 创建资产入库表 【兼维护】

# 创建资产借还表

# 创建资产转移表

# 创建资产维修表

# 创建资产报废表

# 创建资产盘点表

# 综合查询表

# 审批


实现登录

首先在后端定义好一个前端要用的URL地址。

@PostMapping("login")
@ResponseBody
public ResponseResult<User> login(User user){
    User u = userService.login(user.getName(),user.getPassword());
    if (u!=null) {
        return ResponseResult.ok(u,"登录成功!");
    }else {
        return ResponseResult.failed(400,"登录失败!");
    }
}

接着在前端通axios来访问这个地址。

method: {
  login(){
    axios.post('http://****/login', {header(){
      "**": "***"
    }}).then(resp=>{
      .....
    })
  }
}

这样就对其访问,在这里的代码中,想要前端获取到这样的请求体的话就要在Java代码中,修改一下返回值。

{ // 请求体
  "code": 200,
  "Cookie": null,
  "msg": null,
  "imagecode": null,
  "data": {
    "name": "李强",
    "iphone": "1231231231",
    "password": "ssdfsf333"
  },
  "token": null
}

修改结果:

@PostMapping("login")
@ResponseBody
public ResponseResult<User> login(User user){
    User u = userService.login(user.getName(),user.getPassword());
    // 定义一个token的变量来接收生成token对象的结果。
    String token = new GenerateToken();
    // 将这个token 放进 VO类中。做成一个专门给前端的data对象结果。
    u.setToken = token;
    if (u!=null) {
        return ResponseResult.ok(u,"登录成功!");
    }else {
        return ResponseResult.failed(400,"登录失败!");
    }
}

假如将映射实体的,是映射到Mapper中的话。那么所进行的查询操作将要注入mapper来实现。并且还是要重写其中的方法,或者在mapper中添加自定义查询操作。

表单登录

接下来我们输入用户名、密码,跟踪一下认证流程: 在这里插入图片描述

登录流程

流程说明:

  1. 输入用户名、密码提交登录,登录请求会被UsernamePasswordAuthenticationFilter处理,构建预认证对象UsernamePasswordAuthenticationToken
  2. 调用AuthenticationManager(实现类是ProviderManager)进行认证
  3. ProviderManager查询所有认证提供者,DaoAuthenticationProvider符合当前认证类型
  4. DaoAuthenticationProvider查询用户,校验密码
  5. 身份验证成功,存储会话、发布事件、调用成功处理器
  6. 身份验证失败,清除SecurityContext,调用失败处理器

Security 框架

首先了解