一.Spring Security简介
- 使用Spring Security开发基于表单的认证
- 前面我们介绍的如何开发RESTful服务 但是这些服务是处于无保护状态 任何人知道地址都可以直接访问 企业级开发中肯定不准许存在的
- 需要对用户进行认证和授权保证合法用户访问
- Spring Security核心功能
- 认证 (你是谁)
- 授权 (你能干什么)
- 攻击防护 (防止伪造身份)
- 内容简介
- SpringSecurity基本原理
- 实现用户名 + 密码认证 : 常见的认证方式,了解核心概念,如何在默认实现上添加自定义扩展 框架有默认实现
- 实现手机号 + 短信认证 : 框架没有默认实现,所以来学着实现该功能
- SpringSecurity基本原理
二.Spring Security基本原理
security.basic.enabled=false //这个方法已经过时了 关闭spring security的身份认证
-
打开访问所有的请求路径 都会跳转到一个默认表单用户密码登陆认证页面(老版本中则是默认的basic登陆页面)
-
用户名固定是user,密码会在运行时给出
-
默认情况下spring security把你访问的东西都保护起来了 访问任何一个RESTful服务都要认证
-
编写第一个配置类
//所继承的父类是spring security提供的适配器类 专门用来做web应用安全配置的
@Configuration
public class BorowserSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.//formLogin()//form表单 高版本中默认是表单 低版本中默认是HttpBasic
httpBasic() //httpBasic
.and()
//对请求授权配置
.authorizeRequests()
.anyRequest()//对任意请求都必须是已认证才能访问
.authenticated();
}
}
-
HttpBasic登陆
-
spring security基本原理
-
核心就是一组过滤器链。项目启动自动配置上的。最核心的就是 绿色过滤器 用来认证用户的身份;
-
一个过滤器处理一种认证方式;
-
UsernamePassword…这个过滤器是处理表单登陆的
-
Basic…这个过滤器是处理httpBasic登陆的
-
检查是否有这个过滤器有需要的信息 比如说Username…这个过滤器
- 是否是一个登录请求
- 是否含有username和password
- 以上两个都有则带着用户名和密码尝试去登陆
- 没有就放行到下一个过滤器中,Basic…这个过滤器 如果请求头包含 Authorization:Basic eHh4Onh4 的信息 64解码尝试解出用户名和密码尝试去登陆
- 以此为原理一个一个的往下走 当登陆成功都会做出一个标记
- Spring security过滤器链最后一环是 FilterSecurityInterceptor 这里会判定该请求是否能进行访问rest服务 判断的依据是:BrowserSecurityConfig中的配置
-
不过会根据不同的原因抛出不同的异常 (根据具体的原因)
-
Exception Translation Filter 会捕获FilterSecurityInterceptor 抛出的错误,然后根据不同的认证方式进行信息的返回提示
-
验证码登陆和第三方登陆都是在这条过滤器链上加一些绿色的过滤器来支持不同的身份认证方式 实际运行中 过滤器链中不止这三种 其他的后边再说
-
这条过滤器链上 绿色的过滤器是可以通过配置 是否生效,其他的都不能控制