1.实现用户登录
1.1 用户登录凭证存储
说明: 由于用户登录之后,后端服务器会返回给前端用户的token信息. 前端需要保存该token.否则请求结束之后,数据将会销毁.
问题: 服务器端的数据应该存储到哪个位置?
1.2 Session与Cookie
1.2.1 Session介绍
**Session:**在计算机中,尤其是在网络应用中,称为“会话控制”。Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在Session对象中。有关使用Session 对象的详细信息,请参阅“ASP应用程序”部分的“管理会话”。注意会话状态仅在支持cookie的浏览器中保留。
总结: Session是一种会话的一种机制, 新打开浏览器会建立一个会话机制.在该机制中可以存储数据.在会话的周期内,该数据一直有效. 当会话结束时 之前保存的数据将会被销毁.
.2.2 Cookie机制
Cookie,有时也用其复数形式 Cookies。类型为“小型文本文件”,是某些网站为了辨别用户身份,进行Session跟踪而储存在用户本地终端上的数据(通常经过加密),由用户客户端计算机暂时或永久保存的信息 [1] 。
场景: 要求用户7天免密登录.
1.2.3 关于用法案例
- 手机银行用户登录的信息 通过Session存储.
- 财务系统登录信息???Session存储.
- OA系统用户登录信息? Session存储 共性: 安全性!!!
- 腾讯视频会员!!! Cookie存储
- 网址一些大型数据. Cookie存储
1.3 实现用户页面跳转
- 编辑vue页面实现跳转
- 编辑前端路由跳转
- 页面效果展现
1.4 路由导航守卫
1.4.1 需求说明(1.0)
当用户没有登录时,则不允许跳转其他的页面. 只有当用户登录成功之后.才可以跳转页面.
关键点: 检查session中是否有用户登录的token
1.4.2 编辑index.js
说明: 编辑路由文件
2.编辑路由内容,写的时候注意顺序位置.
2 左侧菜单列表实现
2.1 编辑Rights POJO对象
2.2 权限列表查询
说明: 如果需要查询父子结构的数据,则可以通过parent_id的方式查询子级信息./*查询一级权限列表信息*/
SELECT * FROM rights WHERE parent_id=0
/*查询二级权限列表信息*/
SELECT * FROM rights WHERE parent_id=1
/*查询三级权限列表信息*/
SELECT * FROM rights WHERE parent_id=2
2.3 实现权限列表
2.3.1 Ajax请求分析
编辑页面通过Ajax获取远程服务器数据.
2.3.2 业务接口文档说明
2.3.3 编辑RightsController
@RestController
@CrossOrigin
@RequestMapping("/rights")
public class RightsController {
@Autowired
private RightsService rightsService;
/**
* 需求: 查询权限列表信息 只查询1-2级权限列表信息
* URL: /rights/getRightsList
* 参数: 无
* 返回值: SysResult对象(List集合)
*/
@GetMapping("getRightsList")
public SysResult getRightsList(){
List<Rights> rightsList = rightsService.getRightsList();
return SysResult.success(rightsList);
}
}
2.3.4 编辑RightsService
@Service
public class RightsServiceImpl implements RightsService{
@Autowired
private RightsMapper rightsMapper;
/**
* 1.查询所有的1级信息 parent_id=0
* 2.查询1级下边的2级信息 parent_id=1级id
* @return
*/
@Override
public List<Rights> getRightsList() {
//1.查询一级权限信息
QueryWrapper<Rights> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("parent_id",0);
List<Rights> oneList = rightsMapper.selectList(queryWrapper);
//2.查询1级下边的二级list集合
for (Rights rights : oneList){
queryWrapper.clear(); //将where条件清空之后重新添加
queryWrapper.eq("parent_id",rights.getId());
List<Rights> children = rightsMapper.selectList(queryWrapper);
rights.setChildren(children);
}
return oneList;
}
}
2.3.5 页面效果展现
3 用户模块实现
3.1 欢迎页面跳转
说明: 要求用户跳转到/home页面时,在右侧默认展现welcome页面
页面效果如下:
3.2 用户模块说明
3.2.1 需求说明
用户管理模块主要负责用户相关信息的维护,
1.展现用户列表
2.更新用户列表
3.修改用户的状态
4.删除用户
5.新增用户
3.2.2 user表说明
3.2.3 编辑User POJO对象
3.3 用户列表展现
3.3.1 页面Ajax说明
- query不带参数的请求路径
- query带参数的请求路径
3.3.2 用户列表业务接口
- 参数说明
- PageResult对象
3.3.3 编辑PageResult对象
说明: 在jt.com.vo中编辑PageResult对象
3.3.4 编辑UserController
3.3.5 编辑UserService
/**
* Mysql的分页语法: 1.0版本
* select * from user limit 起始位置0,查询的条数
* Sql: 1页2条 n页数/m条数
* SELECT * FROM USER LIMIT 0,2 第一页
* SELECT * FROM USER LIMIT 2,2 第二页
* SELECT * FROM USER LIMIT 4,2 第三页
* SELECT * FROM USER LIMIT 6,2 第四页
* SELECT * FROM USER LIMIT (n-1)m,m 第N页
* @param pageResult
* @return
*/
@Override
public PageResult getUserList(PageResult pageResult) {//3
//1.获取总记录数
long total = userMapper.selectCount(null);
//2.获取分页后的结果
int pageNum = pageResult.getPageNum(); //页数
int pageSize = pageResult.getPageSize(); //行数
int startIndex = (pageNum-1) * pageSize; //起始位置
List<User> rows = userMapper.getUserList(startIndex,pageSize);
//将数据进行封装
pageResult.setTotal(total).setRows(rows); //+2个参数
return pageResult; //最终5个参数返回
}
3.3.6 编辑UserMapper接口
1). 编辑Mapper接口
2. 编辑XML映射文件