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.
16 KiB
16 KiB
路径格式
http://****/user/
请求格式
{ // 请求体[注册]
"Cookie": null,
"imagecode": null,
"data": {
"name": "liqiang",
"iphone": "1231231231",
"password": "ssdfsf333"
},
"token": null
}
{ // 响应体
"code": 200,
"msg": "access",
"token": null,
"data": null
}
{//用户登录请求体
"username": "liqiang",
"password": "liqiang123",
"code": "code number",
}
{// 登录第一次响应体
"token": null,
"id": null,
"isLogin": null
}
{// 获取第一个响应体后的第二次请求
"token": asdfasdfafa,
"username": "liqiang"
}
{// 第二次请求后,最终获取用户路径的响应体
"data": [
{
"name": "admin",
"path": "/admin",
"hidden": false,
"meta": {
"title": "首页"
},
"children": [
{
"name": "admin/user",
"path": "user",
"hidden": false,
"meta": {
"title": "用户管理"
}
},
{
"name": "admin/role",
"path": "role",
"hidden": false,
"meta": {
"title": "角色管理"
}
}
]
}
],
"code": 200
}
// ----------------------------------
// 上面的是登录的响应体,下面是各个操作的统一响应体。
{// 各个操作的响应体
"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": ""
}
}
{//查询操作结果 【分页】
"token": null,
"data": {
"pageTotal", // 总数
"pageSize", // 数量
"pageCurrent", // 当前页数
}
}
{
// 字段查询 [单个字段]
"token": null,
"value": "",
"pageCurrent": "",
"pageSize":"",
}
{
// 多字段查询 【多个字段】
"token": null,
"map":""
}
{// 分页查询结果
"code": 200,
"msg": "",
"data": {
.....
}
}
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中添加自定义查询操作。
表单登录
接下来我们输入用户名、密码,跟踪一下认证流程: 在这里插入图片描述
流程说明:
- 输入用户名、密码提交登录,登录请求会被UsernamePasswordAuthenticationFilter处理,构建预认证对象UsernamePasswordAuthenticationToken
- 调用AuthenticationManager(实现类是ProviderManager)进行认证
- ProviderManager查询所有认证提供者,DaoAuthenticationProvider符合当前认证类型
- DaoAuthenticationProvider查询用户,校验密码
- 身份验证成功,存储会话、发布事件、调用成功处理器
- 身份验证失败,清除SecurityContext,调用失败处理器
Security 框架
最新版的Security 中 将用户一系列请求所进过的过滤器路径封装成一个SecurityFilterChain。随后将这个SecurityFilterChain提交给FilterChainProxy【代理过滤链的类】,并将这个代理过滤链注入到实现过滤功能的核心类来运行【DelegatingFilterProxy】相关的过滤功能。
