详解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 相关文章推荐
Java内存模型之happens-before概念详解
Jun 13 Java/Android
启动Tomcat时出现大量乱码的解决方法
Jun 21 Java/Android
详解Java线程池是如何重复利用空闲线程的
Jun 26 Java/Android
分析JVM源码之Thread.interrupt系统级别线程打断
Jun 29 Java/Android
JUnit5常用注解的使用
Jul 02 Java/Android
Java8中接口的新特性使用指南
Nov 01 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
java版 简单三子棋游戏
May 04 Java/Android
Java 死锁解决方案
May 11 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 Java/Android
tree shaking对打包体积优化及作用
Jul 07 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
如何在PHP中使用Oracle数据库(2)
2006/10/09 PHP
用PHP中的 == 运算符进行字符串比较
2006/11/26 PHP
Ajax PHP分页演示
2007/01/02 PHP
php zend解密软件绿色版测试可用
2008/04/14 PHP
php模拟ping命令(php exec函数的使用方法)
2013/10/25 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
PHP Try-catch 语句使用技巧
2016/02/28 PHP
php英文单词统计器
2016/06/23 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
非常好的js代码
2006/06/27 Javascript
js宝典学习笔记(上)
2007/01/10 Javascript
json 定义
2008/06/10 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
2010/02/11 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
基于JS实现带动画效果的流程进度条
2018/06/01 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
js图片查看器插件用法示例
2019/06/22 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[52:31]VP vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python 2.7.14安装图文教程
2018/04/08 Python
使用Python实现微信提醒备忘录功能
2018/12/04 Python
Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法
2019/09/24 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
意大利婴儿产品网上商店:Mukako
2018/10/14 全球购物
局域网定义和特性
2016/01/23 面试题
畜牧兽医本科生个人的自我评价
2013/10/11 职场文书
家长对孩子的评语
2014/04/18 职场文书
平安工地汇报材料
2014/08/19 职场文书
商场周年庆活动方案
2014/08/19 职场文书