SpringSecurity<1>

1. 我们都知道SpringSecurity是做权限管理的,
权限管理:基本上涉及到用用户的系统都会 进行权限管理
权限管理包括认证和授权。
认证: 对用户访问系统的控制
授权:对已经认证的用户进行授权, 对已经认证的用户再做安全规则 或者说访问控制 控制用户可以访问不同的资源

在这里插入图片描述

行业内的解决方案 
1.shiro  简单 轻量 易于集成, 但是 在微服务时代扩展性不高 
比如Shiro则需要自己手动实现集成Oauth2.0,SpringSecurity 对Oauth的有支持
2.springsecurity spring家族的 加上现在springboot的自动装配,以及springcloud的一站式开发,功能强大,但是缺点就是繁琐 学习成本高
3.自定义权限框架 权限管理并不是 做个登录 授权,还得做 黑白名单
 网络攻击什么的 网络安全的时候  一般在大公司中会自己去做
2.SpringSecurity的整体架构

在这里插入图片描述

Springsecurity的核心是用来做权限管理的 一个认证 一个授权
也就是说核心功能是完成认证授权的
认证和授权分开,认证和授权是2个完全独立的操作
使用那种认证方式 都不会影响授权操作,这样的话可以非常方便的整合一些外部的解决方案
比如 
认证的时候 去整合外部的认证方案
授权的时候  去整合外部的授权方案
 

在这里插入图片描述

入参 Authentication是用来封装账号密码的
返回值是Authtion 代表认证成功了  如果 抛异常 代表认证失败了

Authentication  他里面包含的用户的身份信息 是否被认证了~权限什么的	

在这里插入图片描述

授权先不看  我们先看下环境搭建
1.pom

在这里插入图片描述

2.写一个test类

在这里插入图片描述

3. springsecurity 启动类
我们先写一个Springboot项目

在这里插入图片描述
在这里插入图片描述

Springboot项目跑起来了 并且很成功  现在我在pom 中加入
Springsecurity的jar

在这里插入图片描述

当我再次访问  http://localhost:8080/login  的时候就会
弹出这样一个界面  就代表Springsecurity已经拦截了我们请求

在这里插入图片描述

可以看到, 当我们引入Springsecurity 的pom后
所有接口都应该去做认证 
springsecurity 如何帮我们保护系统中的受限资源  
默认对所有进行保护   无需任何配置
默认账号是user  密码就是 下图中的

在这里插入图片描述

我们可以看到 当我们引入Springsecurity的jar之后,springsecurity 默认帮我们进行了自动配置
默认要求我们所有的请求都认证了才能自动访问, 所有的资源都是受保护资源
这就是 Spring Security 的强大之处,只需要引入一个依赖,所有的接口就会自动保护起来! 
1.为什么引入Springsecurity 之后, 没有任何配置 所有请求都要求认证呢
2.项目中没有登录页面,登录页面怎么来的呢
3. 为什么使用User和控制台密码就可以登录  登录时 数据源又在哪里做匹配呢
在 Spring Security 中 `认证、授权` 等功能都是基于[过滤器]
当我们引入Springsecuriy的jar 后就会有很多默认的Filter   这些Filter 有的会默认开启  当我们引入jar 的时候  

在这里插入图片描述
在这里插入图片描述

看吧,在springsecurity 的pom引入进来的话 ,会创建一个
springSecurityFilterChain 的过滤器链 这个过滤器链 默认
会加载一些过滤器

在这里插入图片描述

这个类是Springboot对Springsecurity 的默认配置 也就是说的自动装配
http
.authorizeRequests()  //开启请求的权限认证 
.anyRequest() // 任何请求
.authenticated()// 都要求认证
.and()
.formLogin()// 认证方式  表单认证
.and()
.httpBasic();// 认证方式 basic

意味着我默认这里要对http的所有请求去进行认证之后才能访问 同时支持表单以及httpbasci

既然我们是form表单认证认证 我们就得知道

在这里插入图片描述

当前你发送的hellow请求 并没有做认证 会抛出一个异常  之后就会交给异常处理器来处理这个异常  处理这个异常的时候
就会根据请求,响应302,请求地址是login 的url 
并且会响应一个页面

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 然后就会有DefaultLoginPageGeneratingFilter 生成默认页面

在这里插入图片描述

当我们form表单认证的时候 就会发送
http://localhost:8080/login 的请求
就会被
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#attemptAuthentication 
拦截到
// 主要的还是这个  authenticate(authRequest); 方法
return this.getAuthenticationManager().authenticate(authRequest); 

在这里插入图片描述

//看他此时的userDetail对象是从内存种根据user加载过来的  如果能找到这个user账号 就可以比对成功

在这里插入图片描述

内存种其实就是一个User的map 

在这里插入图片描述
在这里插入图片描述

然后我们可以重启下项目 可以看到在Springsecurity加载的时候
就可以看到	就可以加载一个
InMemoryUserDetailsManager 这个内存的user对下给你

然后就会创建一个user 对象

在这里插入图片描述

我也可以自定义用户密码

在这里插入图片描述

//  然后就可以看到我们的user对象 的账号密码了~  密码前面加个noop 代表是明文存储

在这里插入图片描述

如果我们的user对象可以获取到 就代表我们已经成功认证了
 如果获取不到就会抛异常,只是我们目前的user对象存储在内存中
 
1.现在我们可以知道个大概流程了 
就是说我们引入Springsecurity 的jar,springboot会对我们进行一个自动装配
用的是默认的配置,所有的http请求都必须开启权限保护,
任何请求都必须认证之后之后才可以访问,而默认提供了表单认证和
basic认证

2. 当我们访问受限资源的时候,比如说/hello.就会被一系列的filter拦截到,当前的hello请求,并没有做认证,会抛出一个异常
然后处理这个异常的时候就会根据请求,响应302,请求地址是login 的url ,并且会生成一个页面
 @ConfigurationProperties(prefix = "spring.security") //可以配置
3. 当我们root/root {密码可以配置 {noop}代表明文的意思}登录时候 我们实际上是依赖于内存的数据源进行比对的

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值