springboot+AOP+自定义注解+RBAC自定义操作权限管理01!今天 做了内容是该自定义权限管理系统的前奏。第一小节内容。搭建了一个基础的springboot项目,和数据库的三张表。
tb_user;tb_role;tb_roel_user。实现了一个基础的,用户和角色表的联动查询。为了后续的内容做好铺垫。下面是测试通过的流程和代码。
下面是基础的参数配置表信息,我们还是用了阿里云的线程池。
server.port= 9091
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/manage?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=
#?????
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#JPA??????
spring.jpa.hibernate.ddl-auto=update
#??SQL????
spring.jpa.show-sql=true
package com.yrl.managedemo.controller;
import com.yrl.managedemo.bean.Result;
import com.yrl.managedemo.bean.Role;
import com.yrl.managedemo.bean.User;
import com.yrl.managedemo.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
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;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private IUserService userService;
@GetMapping("/list")
public Result<User> getUser(){
Result<User> result = new Result<>();
List<User> userList = userService.getAllUser();
for(User u:userList){
System.out.println("用户id"+u.getId());
System.out.println("用户名字"+u.getName());
//获取用户权限的列表信息
List<Role> roleList = u.getRoleList();
for(Role role :roleList){
System.out.println("用户的角色信息:"+role.getRoleName()+";");
}
}
return result;
}
}
这个是userController控制器的内容。。里面在控制台会打印出来我们想看见的内容。比如用户的基本信息,和用户具备的角色信息。
角色信息是可以多对多的。我们使用了list集合来接收。
多对多的关系,存储变量使用list集合。较为稳妥。
package com.yrl.managedemo.bean;
import lombok.Data;
import javax.persistence.*;
import java.util.List;
@Data
@Entity
@Table(name = "tb_user")
public class User {
@javax.persistence.Id
@org.springframework.data.annotation.Id
@GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
private Integer id;
private String name;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "tb_role_user",joinColumns = {@JoinColumn(name="user_id")},inverseJoinColumns = {@JoinColumn(name="role_id")})
private List<Role> roleList;
}
如图,代码里面,user实体类,里面多出来一个list<Role>的属性。这个就是jpa插件,做多对多低配置了。
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "tb_role_user",joinColumns = {@JoinColumn(name="user_id")},inverseJoinColumns = {@JoinColumn(name="role_id")})
我们使用了是懒加载。在需要用到的时候才会去加载这个属性的数据。
第二个参数是配置了多对多的关系映射。正向链接用户表的user_id字段,反向链接角色表的role_id字段。就可以实现了,三张表的联动查询了。
package com.yrl.managedemo.bean;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table(name = "tb_role")
public class Role {
@javax.persistence.Id
@org.springframework.data.annotation.Id
@GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
private Integer id;
@Column(name="role_name", nullable=false)
private String roleName;
}
这个是role角色实体类信息。
package com.yrl.managedemo.bean;
import lombok.Data;
import javax.persistence.*;
@Data
@Entity
@Table(name = "tb_role_user")
public class TbRoleUser {
@javax.persistence.Id
@org.springframework.data.annotation.Id
@GeneratedValue(strategy= GenerationType.IDENTITY)//主键生成策略
private Integer id;
@Column(name = "user_id",nullable = true)
private Integer userId;
@Column(name = "role_id",nullable = true)
private Integer roleId;
}
如图,在控制台打印成功了,我们拿到了该用户的所有信息。包括他具备的角色信息集合。