SpringBoot整合SpringSecurity做认证和权限控制案例(含Demo代码)Demo素材来源于
注意:SpringBoot2.3.x ⼤版本统⼀最好,以免 bug 挡路!
1. Demo 环境搭建
1.1 数据库sql
1.1.1 新建数据
新建⼀个名为community 的数据库,编码类型 utf8mb4
1.1.2 user表
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS =0;
-- ----------------------------
-- Table structure for user
-
- ----------------------------
DROP TABLE IF EXISTS`user`;
CREATE TABLE`user`(
`id`int(11)NOT NULL AUTO_INCREMENT,
`username`varchar(50)CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`password`varchar(50)CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`salt`varchar(50)CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`email`varchar(100)CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`type`int(11)NULL DEFAULT NULL COMMENT'0-普通⽤户; 1-超级管理员; 2-版主;',
`status`int(11)NULL DEFAULT NULL COMMENT'0-未激活; 1-已激活;',
`activation_code`varchar(100)CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`header_url`varchar(200)CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`create_time`timestamp NULL DEFAULT NULL,
PRIMARY KEY(`id`)USING BTREE,
INDEX`index_username`(`username`(20))USING BTREE,
INDEX`index_email`(`email`(20))USING BTREE
)ENGINE=InnoDB AUTO_INCREMENT=156CHARACTER SET= utf8 COLLATE= utf8_general_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS =1;
1.2 初始项⽬导⼊
初始项⽬下载下来,然后使⽤IDEA 将其导⼊即可!(如果链接失效,请评论留⾔,我会更新的!)
链接:
提取码:3gyt
Demo 项⽬结构如图所⽰:
2. SpringBoot 整合Spring Security
2.l 引⼊依赖
<!-- mvnrepository/artifact/org.springframework.boot/spring-boot-starter-security --> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>
依赖我们可以去Maven 远程仓库中搜索:
SpringSecurity默认提供的登录页⾯,账号默认是user,密码在我们启动项⽬主函数时,会以⽇志的形式打印在控制台:
输⼊账号密码登录后,就能进⼊我们项⽬的⾸页 inedx.html
问题:那么如何使⽤⾃⼰⾃定义的登录页⾯以及⾃⼰数据中的⽤户名和密码来控制登录权限呢?接下来就带着这个问题⼀步⼀步往下⾛!
2.2 对User实体进⾏加功处理
我们使⽤Lombok 插件的注解简化 setter/getter 以及构造函数和 toString ⽅法,还有个好处就是可以更清晰的展⽰实现
UserDetails 接⼝后需要重写的⽅法!
/**
* @Auther: csp1999
* @Date: 2020/12/02/17:29
* @Description:
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain =true)
@ToString
public class User implements UserDetails {
private int id;
private String username;
private String password;
private String salt;
private String email;
private int type;
private int status;
private String activationCode;
private String headerUrl;
private Date createTime;
/**
* 获取某个⽤户所具备的权限的集合
* 获取某个⽤户所具备的权限的集合
*
* @return
*/
@Override
springboot结构
public Collection<?extends GrantedAuthority>getAuthorities(){        ArrayList<GrantedAuthority> list =new ArrayList<>();
// 我们demo中只给⽤户加⼀个权限
list.add(new GrantedAuthority(){
@Override
public String getAuthority(){
switch(type){
case1:
return"ADMIM";// 管理员
default:
return"USER";// 普通与⽤户
}
}
});
return list;
}
/**
* 返回true:  账号未过期.
* 返回false: 账号过期.
*
* @return
*/
@Override
public boolean isAccountNonExpired(){
return true;
}
/**
* 返回true:  账号未锁定.
* 返回false: 账号锁定.
*
* @return
*/
@Override
public boolean isAccountNonLocked(){
return true;
}
/**
* 返回true:  凭证未过期.
* 返回false: 凭证过期.
*
* @return
*/
@Override
public boolean isCredentialsNonExpired(){
return true;
}
/**
* 返回true: 账号可⽤.
* 返回false: 账号不可⽤.
*
* @return
*/
@Override
public boolean isEnabled(){
return true;
}
}
2.3 对UserService 实现类进⾏加功处理

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。