详解Spring Security中的HttpBasic登录验证模式


Posted in Java/Android onMarch 17, 2022

一、HttpBasic模式的应用场景

HttpBasic登录验证模式是Spring Security实现登录验证最简单的一种方式,也可以说是最简陋的一种方式。它的目的并不是保障登录验证的绝对安全,而是提供一种“防君子不防小人”的登录验证。

就好像是我小时候写日记,都买一个带小锁头的日记本,实际上这个小锁头有什么用呢?如果真正想看的人用一根钉子都能撬开。它的作用就是:某天你的父母想偷看你的日记,拿出来一看还带把锁,那就算了吧,怪麻烦的。

举一个我使用HttpBasic模式的进行登录验证的例子:我曾经在一个公司担任部门经理期间,开发了一套用于统计效率、分享知识、生成代码、导出报表的Http接口。纯粹是为了工作中提高效率,同时我又有一点点小私心,毕竟各部之间是有竞争的,所以我给这套接口加上了HttpBasic验证。公司里随便一个技术人员,最多只要给上一两个小时,就可以把这个验证破解了。说白了,这个工具的数据不那么重要,加一道锁的目的就是不让它成为公开数据。如果有心人破解了,真想看看这里面的数据,其实也无妨。这就是HttpBasic模式的典型应用场景。

二、spring boot2.0整合Spring security

spring boot 2,x版本maven方式引入Spring security坐标。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

三、HttpBasic登录认证模式

如果使用的Spring Boot版本为1.X版本,依赖的Security 4.X版本,那么就无需任何配置,启动项目访问则会弹出默认的httpbasic认证.

我们现在使用的是spring boot2.0版本(依赖Security 5.X版本),HttpBasic不再是默认的验证模式,在spring security 5.x默认的验证模式已经是表单模式。所以我们要使用Basic模式,需要自己调整一下。并且security.basic.enabled已经过时了,所以我们需要自己去编码实现。

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
  
  @Override
  protected void configure(HttpSecurity http) throws Exception {
   http.httpBasic()//开启httpbasic认证
   .and()
   .authorizeRequests()
   .anyRequest()
   .authenticated();//所有请求都需要登录认证才能访问
  }
}

启动项目,在项目后台有这样的一串日志打印,冒号后面的就是默认密码。

Using generated security password: 0cc59a43-c2e7-4c21-a38c-0df8d1a6d624

我们可以通过浏览器进行登录验证,默认的用户名是user.(下面的登录框不是我们开发的,是HttpBasic模式自带的)

详解Spring Security中的HttpBasic登录验证模式

当然我们也可以通过application.yml指定配置用户名密码

spring:
  security:
   user:
    name: admin
    password: admin

四、HttpBasic模式的原理说明

详解Spring Security中的HttpBasic登录验证模式

  • 首先,HttpBasic模式要求传输的用户名密码使用Base64模式进行加密。如果用户名是 "admin"  ,密码是“ admin”,则将字符串"admin:admin" 使用Base64编码算法加密。加密结果可能是:YWtaW46YWRtaW4=。
  • 然后,在Http请求中使用Authorization作为一个Header,“Basic YWtaW46YWRtaW4=“作为Header的值,发送给服务端。(注意这里使用Basic+空格+加密串)
  • 服务器在收到这样的请求时,到达BasicAuthenticationFilter过滤器,将提取“ Authorization”的Header值,并使用用于验证用户身份的相同算法Base64进行解码。
  • 解码结果与登录验证的用户名密码匹配,匹配成功则可以继续过滤器后续的访问。

所以,HttpBasic模式真的是非常简单又简陋的验证模式,Base64的加密算法是可逆的,你知道上面的原理,分分钟就破解掉。我们完全可以使用PostMan工具,发送Http请求进行登录验证。

详解Spring Security中的HttpBasic登录验证模式

总结

以上所述是小编给大家介绍的Spring Security中的HttpBasic登录验证模式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Java/Android 相关文章推荐
springcloud之Feign超时问题的解决
Jun 24 Java/Android
分析Java中Map的遍历性能问题
Jun 26 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
Spring Boot 整合 Apache Dubbo的示例代码
Jul 04 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
Java使用Unsafe类的示例详解
Sep 25 Java/Android
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
Jan 18 Java/Android
mapstruct的用法之qualifiedByName示例详解
Apr 06 Java/Android
零基础学java之方法的定义与调用详解
Apr 10 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
详解Flutter自定义应用程序内键盘的实现方法
Jun 14 Java/Android
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
Jul 15 Java/Android
RestTemplate如何通过HTTP Basic Auth认证示例说明
Java实现二分搜索树的示例代码
使用HttpSessionListener监听器实战
Mar 17 #Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 #Java/Android
Java基于Dijkstra算法实现校园导游程序
Java中的随机数Random
Mar 17 #Java/Android
SpringBoot中HttpSessionListener的简单使用方式
Mar 17 #Java/Android
You might like
索尼SONY SRF-S83/84电路分析和打磨
2021/03/02 无线电
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
如何使用php实现评委评分器
2015/07/31 PHP
基于php双引号中访问数组元素报错的解决方法
2018/02/01 PHP
jquery1.83 之前所有与异步列队相关的模块详细介绍
2012/11/13 Javascript
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
Javascript级联下拉菜单以及AJAX数据验证核心代码
2013/05/10 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
js获取html的span标签的值方法(超简单)
2016/07/26 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
微信小程序wx.previewImage预览图片实例详解
2017/12/07 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
vue addRoutes实现动态权限路由菜单的示例
2018/05/15 Javascript
JavaScript求一个数组中重复出现次数最多的元素及其下标位置示例
2018/07/23 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
微信小程序制作扭蛋机代码实例
2019/09/24 Javascript
[48:48]完美世界DOTA2联赛PWL S3 Magama vs GXR 第一场 12.19
2020/12/24 DOTA
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Python中print函数简单使用总结
2019/08/05 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
python 解决Fatal error in launcher:错误问题
2020/05/21 Python
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
新加坡最受追捧的体验平台:Hapz
2018/01/01 全球购物
Java如何支持I18N?
2016/10/31 面试题
外贸业务员岗位职责
2013/11/24 职场文书
自我鉴定四大框架
2014/01/17 职场文书
2014年计划生育工作总结
2014/11/14 职场文书
预备党员半年考察意见
2015/06/01 职场文书
八年级作文之友谊
2019/12/02 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python