1.用户的登录操作
1.1对于token的说明
1.由于服务器需要标识已经登录的用户,所以服务器动态生成一个独一无二的token,返回给用户;
2.用户将token保存到本地,方便下次访问时携带;
1.2生成UUID,代码演示
package com.jt.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.util.List;
import java.util.UUID;
@Service
public class UserServiceImpl implements UserService{
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.selectList(null);
}
@Override
public String login(User user) {
//获取明文
String password = user.getPassword();
//加密处理
String md5 = DigestUtils.md5DigestAsHex(password.getBytes());
user.setPassword(md5);
//查询数据库
QueryWrapper<User> queryWrapper = new QueryWrapper(user);
User user1 = userMapper.selectOne(queryWrapper);
//判断登录是否正确
if (user1==null){
return null;
}
String token = UUID.randomUUID().toString().replace("-", "");
return token;
}
}
1.3 Session和Cookie
session:
1.session被称之为"会话机制";
2.在浏览器中打开网页,就是一个会话
3.用户的数据可以保存到会话中,但是有生命周期,当会话关闭,则数据消失
cookie:
1.cookie是一个小型的文本文件
2.cookie中存储的数据一般都是密文.
3.cookie中的数据的生命周期可控.
cookie和session的区别:
1.session的数据是临时存储.cookie的数据可以永久保存. (生命周期不同)
2.sesion是浏览器中的一个内存对象!而cookie是一个实际的本地文件. (形式不同).
3.session一般存储是一些涉密数据.cookie一般存储相对公开的数据(免密登录). (安全性)
2.路由导航守卫
2.1说明
前端页面跳转是通过路由进行控制. 规定: 如果用户没有登录,则只允许访问登录页面.只有登录之后才能访问其它页面.
2.2 路由导航守卫实现
//定义路由导航守卫
// 参数1 to 路由跳转的网址
// 参数2 from 路由从哪里来
// 参数3 next 是一个函数 表示放行或重定向
// next() 放行 next("/login") 重定向
//业务实现
//检查是否有token
//如果访问login页面,直接放行
// 有token 表示已经登录,放行请求; 没有token 表示用户没有登录,重定向到登录页面
router.beforeEach((to,from,next) =>{
if(to.path==="/login"){
return next()
}
let token = window.sessionStorage.getItem("token",token)
if(token){
return next()
}
next("/login")
})
export default router
3.登陆以后,展现左侧列表信息
3.1 搭建Rights层级代码
3.2编辑RightsController
package com.jt.controller;
import com.jt.pojo.Rights;
import com.jt.service.RightsService;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@CrossOrigin
@RestController
@RequestMapping("/rights")
public class RightsController {
@Autowired
private RightsService rightsService;
@GetMapping("/findAll")
public List<Rights> findAll(){
return rightsService.findAll();
}
@GetMapping("/getRightsList")
public SysResult getRightsList(){
List<Rights> rightsList = rightsService.getRightsList();
return SysResult.success(rightsList);
}
}
3.3编辑RightsService
package com.jt.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.RightsMapper;
import com.jt.pojo.Rights;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RightsServiceImpl implements RightsService {
@Autowired
private RightsMapper rightsMapper;
@Override
public List<Rights> findAll() {
return rightsMapper.selectList(null);
}
@Override
public List<Rights> getRightsList() {
//查询一级菜单
QueryWrapper<Rights> queryWrapper = new QueryWrapper();
queryWrapper.eq("parent_id", 0);
List<Rights> oneList = rightsMapper.selectList(queryWrapper);
//遍历一级菜单
for (Rights rights:oneList){
//根据一级菜单信息,查询当前菜单下的二级信息
queryWrapper.clear();
queryWrapper.eq("parent_id", rights.getId());
List<Rights> twoList = rightsMapper.selectList(queryWrapper);
//将查询到的二级信息,封装到一级对象中
rights.setChildren(twoList);
}
return oneList;
}
}
3.4页面展示
4.用户模块展示
4.1实现用户的页面跳转
说明: URL:/user 要求跳转组件 User.vue组件,组件的跳转应该在Home组件内部跳转;
Home组件说明: 在main的区域中,设定 作用 Home的子级标签将来组件在该区域展现.
4.2定义子级组件
说明:通过路由实现父子的组件嵌套
4.3页面展示