网上搜了很多解决办法,解决起来还是很简单的,做一下记录。
最推荐的是
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
这个注解原封不动的加在类上就好了。
我的user类如下:
package com.huayue.authservice.entity;
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
import com.huayue.common.entity.SuperEntity;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
/**
* @author huayue.
* @email huayuechn@gmail.com
* @date 2019/1/10.
*/
@Entity
@Table(name="sys_user")
@Data
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class User extends SuperEntity implements UserDetails, Serializable {
@Column(name="username")
private String username;
@Column(name="password")
private String password;
@Column(name="salt")
private String salt;
@Column(name="email")
private String email;
@Column(name="mobile")
private String mobile;
@Column(name="status")
private boolean status;
@Column(name="del_flag")
private boolean delFlag;
@ManyToMany(targetEntity = Role.class,cascade = {CascadeType.REFRESH},fetch = FetchType.EAGER)
@JoinTable(name = "sys_user_role",
joinColumns = @JoinColumn(name = "user_id",referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "role_id",referencedColumnName = "id"))
private List<Role> authorities;
public User(String username,String password) {
this.username = username;
this.password = password;
}
public User() {
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return true;
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return true;
}
}
加了这个注解之后,authorities的List里本来是要查询出User列表的,但是查询出来只显示role的信息和role关联的userID列表。避免了无限循环查询的情况。这个注解我觉得还是比较无脑的。