Simple Demo
该系列都是基于前后端分离的方式,返回的数据都是使用的 JSON,以及使用了自定义的返回结果 starter:https://gitee.com/lin-mt/result-spring-boot。
源码地址: https://gitee.com/lin-mt/spring-boot-examples/tree/master/spring-security-data-permission-control
新建一个 SpringBoot 项目,引入相关依赖
<dependency>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
<dependency>
<artifactId>spring-boot-starter-security</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
<dependency>
<artifactId>spring-boot-starter-web</artifactId>
<groupId>org.springframework.boot</groupId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<artifactId>mysql-connector-java</artifactId>
<groupId>mysql</groupId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.gitee.lin-mt</groupId>
<artifactId>result-spring-boot-starter</artifactId>
</dependency>
自定义用户信息
/**
* 用户信息.
*
* @author <a href="mailto:lin-mt@outlook.com">lin-mt</a>
*/
@Entity
@Table(name = "sys_user")
public class SysUser extends BaseEntity implements UserDetails, CredentialsContainer {
private String username;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String secretCode;
private int accountNonExpired;
private int accountNonLocked;
private int credentialsNonExpired;
private int enabled;
@Transient
private Collection<? extends GrantedAuthority> authorities;
// setter and getter
@Basic
@Override
@Column(name = "username")
public String getUsername() {
return username;
}
@Override
@Transient
@JsonIgnore
public String getPassword() {
return getSecretCode();
}
@Override
@Transient
public boolean isAccountNonExpired() {
return 0 == this.accountNonExpired;
}
@Override
@Transient
public boolean isAccountNonLocked() {
return 0 == this.accountNonLocked;
}
@Override
@Transient
public boolean isCredentialsNonExpired() {
return 0 == this.credentialsNonExpired;
}