项目一5 对用户分配角色 用户登录 构造权限数据 日志

该博客围绕项目展开,涵盖分配角色、用户登录、动态构造菜单数据和日志管理等功能。分配角色涉及进入页面和实现分配的controller、service、dao操作;用户登录用邮箱密码,密码需MD5加密;动态构造菜单数据介绍了数据库表字段;日志管理通过Spring AOP动态保存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# 回顾

角色管理

模块管理

分配权限(  ztree, 构造ztree的json数据,分配权限  )

1 分配角色

1.1 进入分配页面

实现步骤:

  1. 根据用户id查询用户数据
  2. 查询所有的角色数据
  3. 根据用户id查询此用户的所有角色数据
  4. 循环构造用户所有角色的id字符串

controller

在这里插入图片描述

service

在这里插入图片描述

dao

在这里插入图片描述

1.2 实现角色分配

  • 当传递同名参数的时候,在controller中直接获取数组

controller

在这里插入图片描述

service

在这里插入图片描述

dao

在这里插入图片描述

2 用户登录

使用邮箱和密码进行登录

登录的步骤

web:

  1. 获取登录的用户邮箱和密码

  2. 判断用户的邮箱和密码是否为空

  3. 根据邮箱查询用户

  4. 判断用户是否存在以及数据库密码是否和用户登录密码一致

    4.1 如果一致 : 将用户数据保存到session,跳转到主页

    4.2 如果不一致: 跳转到登录页面重新登录

2.1 代码实现

在这里插入图片描述

2.2 登录密码

密码需要加密处理 : 使用MD5算法加密

将今天资料中的工具类Encrypt.java导入到export_common工程中,在用户登录的时候,需要对用户的密码进行加密

在这里插入图片描述

3 动态构造菜单数据

3.1 数据说明

用户数据
	1.sass管理员
	2.企业管理员
	3.企业的普通员工
菜单数据
	1.saas管理访问的saas系统的内部菜单
	2.企业用户访问的业务菜单
菜单的权限数据
	1.sass管理员    : 可以访问所有的sass系统的内部菜单
	2.企业管理员     : 可以访问所有的企业的业务菜单
	3.企业的普通员工  : 根据rbac的数据规则查询对应的菜单权限

3.2 数据库表的字段

用户数据库表

用户表中的degree字段:

​ degree==0 : saas管理员

​ degree==1: 企业管理员

​ degree==其他: 企业的普通员工

模块数据库表

​ 模块表中的belong字段:

​ belong==0 : saas的内部菜单

​ belong==1: 企业的业务菜单

3.3 操作步骤

在这里插入图片描述

3.4 代码实现

service

在这里插入图片描述

dao

在这里插入图片描述
在这里插入图片描述

4 日志管理

4.1 日志的列表展示

常规操作

4.2 动态的保存日志

使用spring中的AOP完成日志部分的增强

Aop的切面类

AOP的配置 (基于xml结合注解的配置方式)

  • 开启对AOP注解的支持
  • aop的注解( @Aspect, @Around )
package cn.itcast.web.aspect;

import cn.itcast.domain.system.SysLog;
import cn.itcast.domain.system.User;
import cn.itcast.service.system.SysLogService;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.lang.reflect.Method;
import java.util.Date;

/**
 * 1.创建对象
 * 2.声明切面类
 */
@Component
@Aspect
public class LogAspect {

   @Autowired
   private SysLogService sysLogService;

   @Autowired
   private HttpSession session;

   @Autowired
   private HttpServletRequest request;

   /**
    * 环绕通知
    */
   @Around(value="execution(* cn.itcast.web.controller.*.*.*(..))")
   public Object around(ProceedingJoinPoint pjp) throws Throwable {

      //1.获取方法标记对象
      MethodSignature ms = (MethodSignature)pjp.getSignature();
      //2.从标记对象中获取当前执行的method对象
      Method method = ms.getMethod();
      if(method.isAnnotationPresent(RequestMapping.class)) {
         RequestMapping annotation = method.getAnnotation(RequestMapping.class);
         String path = annotation.value()[0];
         String name = annotation.name();
         //保存日志
         SysLog log = new SysLog();
         //对日志的属性赋值
         log.setIp(request.getLocalAddr());
         log.setTime(new Date());
         Object obj = session.getAttribute("loginUser");
         if(obj != null) {
            User user = (User) obj;
            log.setUserName(user.getUserName());
            log.setCompanyId(user.getCompanyId());
            log.setCompanyName(user.getCompanyName());
         }else{
            log.setUserName("匿名");
         }
         log.setMethod(method.getName());
         log.setAction(path + "--" + name);

         sysLogService.save(log);
      }

      //调用被代理对象的方法
      return pjp.proceed();
   }

}

作业:

1. 代码同步
2. 预习第六天!!!!!!!!!!!!!!!!!!!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值