前言
这些阵子做项目用到了Security做认证,结果在做资源访问时总是401异常,想想自己也重来没系统的整理过Security的知识,所以写下这篇博客来梳理下自己所学的Security知识
一、Spring Security核心功能
作为一个权限管理框架,Spring Security最最核心的功能无非就是两个方面
简单的说,认证就是我们常说的登录,授权就是权限鉴别,看看请求是否具备相应的权限
Spring Security 支持多种不同的认证方式,这些认证方式有的是Spring Security自己提供的认证功能,有的是第三方标准组织制定的,主要有以下比较常见的:
- HTTP BASIC authentication headers:基于IETF RFC 标准
- HTTP Digest authentication headers:基于IETF RFC 标准
-
HTTP X.509 client certificate exchange:基于IETF RFC 标准。 -
LDAP:跨平台身份验证。 -
Form-based authentication:基于表单的身份验证。 -
Run-as authentication:用户用户临时以某一个身份登录。 -
OpenID authentication:去中心化认证。 -
Jasig Central Authentication Service:单点登录。 -
Automatic "remember-me" authentication:记住我登录(允许一些非敏感操作)。 -
Anonymous authentication:匿名登录
作为一个开放的平台,Spring Security 提供的认证机制不仅仅是上面这些。如果上面这些认证机制依然无法满足你的需求,我们也可以自己定制认证逻辑。当我们需要和一些“老破旧”的系统进行集成时,自定义认证逻辑就显得非常重要了。
除了认证,剩下的就是授权了。
Spring Security 支持基于 URL 的请求授权(例如微人事)、支持方法访问授权以及对象访问授权
二、Spring Security配置默认的用户
我们都知道在Spring Boot项目中导入Spring Security的依赖后再启动项目,就会自动启动拦截功能,此时Spring Security默认的登录用户名是user,密码是控制台打印的一个随机的UUID字符串,那么怎么改变默认的登录用户呢,下面介绍了两种方法
1.通过Spring Boot配置文件来配置
修改application.yml或者application.properties的内容,我修改的是yml文件代码如下:
spring:
security:
user:
name: admin
password: 1234567
2.通过Spring Security配置来添加内存中的用户
- 创建一个配置类继承WebSecurityConfigureAdapter
- 重写参数为AuthenticationManagerBuilder的configure方法
- 配置一个PasswordEncoder的Bean????
- roles中配置的是用户的角色可以忽略? ? ? ? ??
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().
withUser("admin")
.password(passwordEncoder().encode("123456"))
.roles("admin");
}
?注意:在配置类中配置的用户名和密码会覆盖掉配置文件中相同的用户名和密码,例如在我这里配置文件中写的用户名为admin密码为1234567,然后在配置类中我写的用户名为admin,密码为:123456,在实际登录时正确的密码就为123456
未完待续......
|