目录
集成权限认证框架
权限认证基础知识
1.身份认证:
身份认证是计算机及软件系统用于确认用户具有合法身份的一种技术手段,计算机系统和计算机网络是一个虚拟的数字世界.在这个数字世界里,一切信息都是用一组特定的数据来表示的,计算机只能识别用户的数字身份,所有对用户的授权也是针对用户数字身份的授权,保证操作者的物理身份与数字身份相对应成为一个很重要的问题,身份认证技术的诞生就是为了解决这个问题;
目前Web应用的身份认证方式比较流行的有以下几种
- HTTP Form认证
- HTTP Basic认证
- HTTP Token认证
- HTTPS 证书认证
2.授权管理
授权管理的目的是为了控制资源的访问(哪些用户能够访问哪些资源,什么资源不能被访问),从而控制用户能够使用哪些系统资源,当用户登录后,系统会给用户分配系统资源访问权限,而这个权限是由管理员预先设定好的;
3.权限控制
只要有用户参与的系统一般都要有权限控制,权限控制实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源
授权管理和权限控制的区别
总的来说,授权管理的关注点在于确认用户的身份以及确定他们在系统中具有的权利,而权限控制的关注点则在定义和管理系统中用户或者实体的操作权限,以及确保只有授权的用户能够执行特定的操作
Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
优缺点:
优点
- Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易。
- Spring Security功能强大,比较好用。
缺点
- Spring Security 是一个重量级的安全管理框架,
- Spring Security概念复杂,配置繁琐
Spring Boot集成SpringSecurity
一.不引入数据库的集成操作
1.引入依赖
注:此处的集成实例并未连接数据库,因此只有两个依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
引入security依赖后,默认所有的登录界面都被拦截到他的登录界面(访问路径为/login,退出为/logout),默认的账号为user,密码是SpringBoot启动时,控制台打印的
2.配置类
采用的自定义权限的方式进行配置
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
PasswordEncoder passwordEncoder(){
// return NoOpPasswordEncoder.getInstance();//采用明文的方式,这里并不推荐
return new ECryptPasswordEncoder(); //采用加密的方式进行密码的配置
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
String encoderPw=passwordEncoder().encode("123");
auth
.inMemoryAuthentication()
.withUser("zs") //用户名
.password(encoderPw) //用户密码
.authorities("book:list","book:add") //赋予的权限