spring boot 在进行权限管理时出现栈溢出
来源:互联网 发布:linux system函数阻塞 编辑:程序博客网 时间:2024/06/05 10:39
在下用的是jpa整合Hibernate
application.yml配置
spring: profiles: active: dev datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/**** username: ** password: **jpa: hibernate: ddl-auto: update show-sql: true
上面是权限管理用到的表
下面放出三个实体采用JPA注解,实体均为关联实体
1 User实体
package com.example.demo.domain;import lombok.Data;import org.hibernate.validator.constraints.NotEmpty;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.Table;import javax.persistence.Transient;import java.util.HashSet;import java.util.Set;/** * @Author :zhanglu * @Description: * @Date :Created in 15:18 2017/11/13 * @Modified By: */@Entity@Table(name = "t_user")public @Dataclass User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @NotEmpty(message = "用户名不能为空") private String username; @NotEmpty(message = "密码不能为空") private String password; // 将与他关联的书 @ManyToMany(fetch= FetchType.LAZY) @JoinTable(name = "t_user_role", joinColumns = { @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "role_id") }) private Set<Role> roleList;// 一个用户具有多个角色 public User() { super(); } public User(String username, String password) { super(); this.username = username; this.password = password; } // 省略 get set 方法 @Transient public Set<String> getRolesName() { Set<Role> roles = getRoleList(); Set<String> set = new HashSet<String>(); for (Role role : roles) { set.add(role.getRolename()); } return set; }}
2 Role实体
package com.example.demo.domain;import lombok.Data;import javax.persistence.Entity;import javax.persistence.FetchType;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.OneToMany;import javax.persistence.Table;import javax.persistence.Transient;import java.util.HashSet;import java.util.Set;/** * @Author :zhanglu * @Description: * @Date :Created in 15:20 2017/11/13 * @Modified By: */@Entity@Table(name = "t_role")public @Dataclass Role { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String rolename; @OneToMany(mappedBy = "role", fetch= FetchType.EAGER) private Set<Permission> permissionList;// 一个角色对应多个权限 @ManyToMany @JoinTable(name = "t_user_role", joinColumns = { @JoinColumn(name = "role_id") }, inverseJoinColumns = { @JoinColumn(name = "user_id") }) private Set<User> userList;// 一个角色对应多个用户 // 省略 get set 方法 @Transient public Set<String> getPermissionsName() { Set<String> list = new HashSet<>(); Set<Permission> perlist = getPermissionList(); for (Permission per : perlist) { list.add(per.getPermissionname()); } return list; }}3Permission
package com.example.demo.domain;import lombok.Data;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.ManyToOne;import javax.persistence.Table;/** * @Author :zhanglu * @Description: * @Date :Created in 15:21 2017/11/13 * @Modified By: */@Entity@Table(name = "t_permission")public @Dataclass Permission { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String permissionname; @ManyToOne @JoinColumn(name = "role_id") private Role role;// 一个权限对应一个角色 // 省略 get set}
二Dao层
package com.example.demo.Repository;import com.example.demo.domain.User;import org.springframework.data.jpa.repository.JpaRepository;import java.util.List;/** * @Author :zhanglu * @Description: * @Date :Created in 13:59 2017/11/6 * @Modified By: */public interface UserRepository extends JpaRepository<User,Integer> { public User findUserByUsername(String currentLoginName); public List<User> findAll();}
三、Service
public User findByLoginName(String currentLoginName){ return userRepository.findUserByUsername(currentLoginName); }
Controler调用Service的时候就出现栈溢出
原因是我的实体里面查一个用户就必须差出他的角色,查出角色又要查权限,而角色又要查用户,而用户名是无法查出角色的,id才可以此时栈存的就只是角色的引用,就发生了栈溢出。
最后,建议关联表多就不要用jpa的toMany等注解。
阅读全文
0 0
- spring boot 在进行权限管理时出现栈溢出
- Spring Boot整合jpa,Shiro进行权限管理
- Spring Boot Shiro 权限管理
- Spring Boot Shiro 权限管理
- Spring Boot Shiro权限管理
- Spring Boot Shiro 权限管理
- Spring Boot Shiro权限管理
- Spring Boot Shiro 权限管理
- Spring Boot Shiro 权限管理
- Spring Boot Shiro 权限管理
- spring boot shiro 权限管理
- spring boot shiro权限管理
- Spring Boot Shiro 权限管理
- 如何在spring项目中使用shiro进行权限管理
- 39 Spring Boot Shiro权限管理【从零开始学Spring Boot】
- 39.3 Spring Boot Shiro权限管理【从零开始学Spring Boot】
- 39.4 Spring Boot Shiro权限管理【从零开始学Spring Boot】
- Spring Boot shiro 权限管理 小例子
- JDK8新特性之Stream流
- JDK8新特性之函数式接口
- JDK8新特性之Lambda表达式
- JDK8新特性之Optional
- JDK8之新特性扩展篇
- spring boot 在进行权限管理时出现栈溢出
- JDK8新特性之重复注解
- 有向图的邻接表储存
- JDK8新特性之方法引用
- SpringCloud配置中心高可用搭建
- SpringCloud配置中心客户端读取配置
- 2018年必看:关于区块链技术的10本书
- 什么是Kotlin?Java的替代语言?
- Junit5新功能一览