用户登录操作;cookie和session;展现左侧列表信息

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页面展示

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值