详解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 Optional<Foo>转换成List<Bar>的实例方法
Jun 20 Java/Android
Feign调用传输文件异常的解决
Jun 24 Java/Android
Java基于字符界面的简易收银台
Jun 26 Java/Android
Springboot集成阿里云OSS上传文件系统教程
Jun 28 Java/Android
JavaWeb Servlet实现网页登录功能
Jul 04 Java/Android
springboot 自定义配置 解决Boolean属性不生效
Mar 18 Java/Android
springboot应用服务启动事件的监听实现
Apr 06 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
springboot实现string转json json里面带数组
Jun 16 Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 Java/Android
Java 多线程并发FutureTask
Jun 28 Java/Android
一文了解Java动态代理的原理及实现
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 中执行排序与 MySQL 中排序
2009/04/21 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
Laravel 5 框架入门(三)
2015/04/09 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
js apply/call/caller/callee/bind使用方法与区别分析
2009/10/28 Javascript
你必须知道的JavaScript 变量命名规则详解
2013/05/07 Javascript
jquery获取一个元素下面相同子元素的个数代码
2014/07/31 Javascript
javascript实现在某个元素上阻止鼠标右键事件的方法和实例
2014/08/12 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
Bootstrap3下拉菜单的实现
2017/02/22 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
node中Express 动态设置端口的方法
2017/08/04 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
对vuex中store和$store的区别说明
2020/07/24 Javascript
Vue 请求传公共参数的操作
2020/07/31 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
举例讲解Python中的死锁、可重入锁和互斥锁
2015/11/05 Python
Python实现替换文件中指定内容的方法
2018/03/19 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
Python生成器generator原理及用法解析
2020/07/20 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
澳大利亚票务和娱乐市场领导者:Ticketmaster
2017/03/03 全球购物
打架检讨书500字
2014/01/29 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
大学生英语演讲稿
2014/04/24 职场文书
外贸业务员求职信
2014/06/16 职场文书
三人合伙协议书范本
2014/10/29 职场文书
2014离婚协议书范文(3篇)
2014/11/29 职场文书
2015年暑假生活总结
2015/07/13 职场文书
vue如何使用模拟的json数据查看效果
2022/03/31 Vue.js