
⒈实体Bean
package cn.coreqi.blog.entities; import org.springframework.security.core.GrantedAuthority;
import javax.persistence.*; /**
* 表示权限的实体类
* @author fanqi
*/
@Entity
public class Authority implements GrantedAuthority {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //自增长
private Long id; @Column(nullable = false) //值不能为空
private String name; public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} @Override
public String getAuthority() {
return this.name;
}
}
package cn.coreqi.blog.entities; import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import javax.persistence.*;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List; /**
* 用户实体类
* @author fanqi
*/
@Entity
public class User implements Serializable,UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) //自增主键
private Long id; //主键ID @NotEmpty(message = "姓名不能为空!")
@Size(min = 2,max = 20)
@Column(nullable = false,length = 20)
private String name; @NotEmpty(message = "邮箱不能为空!")
@Size(max = 50)
@Email(message = "邮箱格式不正确!")
@Column(nullable = false,length = 50,unique = true)
private String email; @NotEmpty(message = "用户账号不能为空!")
@Size(min = 6,max = 18)
@Column(nullable = false,length = 18,unique = true)
private String username; //用户账号 @NotEmpty(message = "用户密码不能为空!")
@Size(max = 20)
@Column(length = 20)
private String password; //用户密码 @Column(length = 200)
private String avatar; //头像图片地址 @ManyToMany(cascade = CascadeType.DETACH,fetch = FetchType.EAGER)
@JoinTable(name = "user_authority", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "authority_id", referencedColumnName = "id"))
private List<Authority> authorities; public User() {
} public Long getId() {
return id;
} public void setId(Long id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public void setUsername(String username) {
this.username = username;
} public void setPassword(String password) {
this.password = password;
} public String getAvatar() {
return avatar;
} public void setAvatar(String avatar) {
this.avatar = avatar;
} public void setAuthorities(List<Authority> authorities) {
this.authorities = authorities;
} @Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
", avatar='" + avatar + '\'' +
", authorities=" + authorities +
'}';
} @Override
public Collection<? extends GrantedAuthority> getAuthorities() {
// return authorities;
// 需将 List<Authority> 转成 List<SimpleGrantedAuthority>,否则前端拿不到角色列表名称
List<SimpleGrantedAuthority> simpleAuthorities = new ArrayList<>();
for(GrantedAuthority authority : authorities){
simpleAuthorities.add(new SimpleGrantedAuthority(authority.getAuthority()));
}
return simpleAuthorities;
} @Override
public String getPassword() {
return password;
} @Override
public String getUsername() {
return username;
} @Override
public boolean isAccountNonExpired() { //账号是否未过期
return true;
} @Override
public boolean isAccountNonLocked() { //账号是否未锁
return true;
} @Override
public boolean isCredentialsNonExpired() { //验证信息是否未过期
return true;
} @Override
public boolean isEnabled() { //账号是否启动
return true;
}
}
⒉仓库
package cn.coreqi.blog.repository; import cn.coreqi.blog.entities.Authority;
import org.springframework.data.jpa.repository.JpaRepository; public interface AuthorityRepository extends JpaRepository<Authority,Long> {
}
⒊服务层
package cn.coreqi.service; import cn.coreqi.blog.entities.Authority;
import org.springframework.stereotype.Service; public interface AuthorityService {
/**
* 根据ID查询权限
* @param id
* @return
*/
Authority getAuthorityById(Long id);
}
package cn.coreqi.service.impl; import cn.coreqi.blog.entities.Authority;
import cn.coreqi.blog.repository.AuthorityRepository;
import cn.coreqi.service.AuthorityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class AuthorityServiceImpl implements AuthorityService { @Autowired
private AuthorityRepository repository; @Override
public Authority getAuthorityById(Long id) {
return repository.findById(id).get();
}
}
⒋控制层(待补充