011 SpringSecurity的基本原理
一:securuty默认情况
1.默认的配置
在引用security依赖以后,会有一个配置
security.basic.enabled=true
2.启动
用户名:user
密码:在控制台上查看

3.作用
在demo中的所有服务都没有被保护,是不安全的。
所以,需要有认证与授权
刚才的属于security默认的实现方式。
二:基于浏览器的安全的基本认知
1.新建一个包
并覆盖原有的安全配置
package com.cao.security.browser; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* 覆盖掉security原有的配置
* @author dell
*
*/
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
//表单登陆的一个安全认证环境
http.formLogin()
.and()
.authorizeRequests() //请求授权
.anyRequest() //任何请求
.authenticated(); //都需要认证 }
}
2.效果
进入登录页

登录之后:
又会返回到刚刚访问的页面

3.httpbasic的身份认证
package com.cao.security.browser; import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* 覆盖掉security原有的配置
* @author dell
*
*/
@Configuration
public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
//表单登陆的一个安全认证环境
// http.formLogin()
http.httpBasic()
.and()
.authorizeRequests() //请求授权
.anyRequest() //任何请求
.authenticated(); //都需要认证 }
}
4.效果

三:原理
1.原理图

2.原理说明
前面都是可以配置的过滤器。
如果没有带登录信息,就会一个一个朝后做验证。
一直到最后一个,如果前面都通过了,但是没有登录,将会抛出异常,到ExceptionTranslationFilter,做一个重定向到登录页。
然后,用户登录,就会到相应的过滤器,又会到最后一个FilterSecurityInterceptor,
最终进入Restful API
3.进行断点观察
FilterSecurityInterceptor

ExceptionTranslationFilter:捕获异常

UsernamePasswordAuthenticationFilter

UserController:进入服务

011 SpringSecurity的基本原理的更多相关文章
- Spring Security构建Rest服务-0600-SpringSecurity基本原理
一.引入 只要引入了spring-boot-starter-security,所有的服务都会被保护起来.启动项目,打开时所有的controller会被保护起来,随便访问一个,如http://local ...
- 反汇编基本原理与x86指令构造
反汇编基本原理与x86指令构造 概要:旨在讲述程序的二进制代码转换到汇编.即反汇编的基本原理.以及 x86 架构的 CPU 的指令构造,有这个基础后就能够自己编写汇编程序了,也能够将二进制代码数据转换 ...
- SpringSecurity之记住我功能的实现
Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...
- SpringBoot应用篇(二):SpringSecurity实现带验证码的登录认证 附代码
一.文章简介 本文简要介绍了spring security的基本原理和实现,并基于springboot整合了spring security实现了基于数据库管理的用户的登录和登出,登录过程实现了验证码的 ...
- SpringSecurity认证流程详解
SpringSecurity基本原理 在之前的文章<SpringBoot + Spring Security 基本使用及个性化登录配置>中对SpringSecurity进行了简单的使用介绍 ...
- SpringBoot+SpringSecurity之多模块用户认证授权同步
在之前的文章里介绍了SpringBoot和SpringSecurity如何继承.之后我们需要考虑另外一个问题:当前微服务化也已经是大型网站的趋势,当我们的项目采用微服务化架构时,往往会出现如下情况: ...
- SpringSecurity(2)---记住我功能实现
SpringSecurity(2)---记住我功能实现 上一篇博客实现了认证+授权的基本功能,这里在这个基础上,添加一个 记住我的功能. 上一篇博客地址:SpringSecurity(1)---认证+ ...
- SpringSecurity简单入门
1.简介 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架.它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spr ...
- Ognl表达式基本原理和使用方法
Ognl表达式基本原理和使用方法 1.Ognl表达式语言 1.1.概述 OGNL表达式 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,他是一个 ...
随机推荐
- iOS NSArray 的count方法返回的是无符号整形!
){ return cell; } 这样写是错误的!!!当数组为空时,由于count方法返回的是无符号整形,没有负数,self.requests.count -1是一个非常大的正数! 正确写法: &g ...
- 洛谷P4827 [国家集训队] Crash 的文明世界 [斯特林数,组合数,DP]
传送门 思路 又见到这个\(k\)次方啦!按照套路,我们将它搞成斯特林数: \[ ans_x=\sum_{i=0}^k i!S(k,i)\sum_y {dis(x,y) \choose i} \] 前 ...
- winform中textbox提示框
在winform中向textbox输入内容时下面有提示信息,效果如图所示: private void Form1_Load(object sender, EventArgs e) { Auto ...
- Confluence 6 Windows 中以服务方式自动重启为服务手动安装 Confluence 分发包
在 Windows: 打开一个命令输入框,然后修改目录到 <CONFLUENCE-INSTALL>/bin 目录中.你需要以管理员权限运行这个命令行输入框(Run as administr ...
- Confluence 6 附件存储选项
在早期的 Confluence 版本中,我们允许存储附件到 WebDav 或者 Confluence 数据库中.针对新的 Confluence 安装,我们不再支持这 2 种存储了. 本地文件系统 在默 ...
- PHP中json_encode()使用须知,JSON数组和JSON对象
⊰ 偷偷的告诉你,这是一个很不谨慎就会踩得坑 ⊱ 如下代码 (看了一下很简单,没毛病啊,老铁) $arr = array( '0'=>'a','1'=>'b','2'=>'c',' ...
- svn上check下来的项目,用idea打开,菜单栏没有svn工具解决办法
1.用idea打开你的项目(idea已经配置过小乌龟了) 2.菜单栏点击VCS,Enable Version Control Integration... 3.选择Subversion 4.这时候,菜 ...
- 波哥博客Url
http://www.cnblogs.com/whatlonelytear/
- Java面向对象(二)
一.封装 1.为什么要使用封装在类的外部直接操作类的属性是”不安全的"2.如何实现封装 1).属性私有化:设置属性的修饰符为private 2) .提供公共的set和get方法赋值 ...
- npm 如何查看一个包的版本信息?
转载. https://blog.csdn.net/cvper/article/details/79543262 有了npm 我们能够简单的一段代码就下载我们需要的包,但是包是不断更新的, 所以我们要 ...