如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证

在上一篇文章中,我向您展示了如何在Java应用程序中启用Spring安全性 ,今天我们将讨论如何使用Spring Security 在Java Web应用程序中启用Basic HTTP身份验证 。 如果您使用的是Spring Security 3.1或更低版本,我将向您展示如何同时使用Java配置和XML配置,但是在此之前,让我们了解一下
什么是Http基本身份验证 ,为什么需要它? 在Web应用程序中对用户进行身份验证的最常见方法之一是使用表单登录,即,您提供登录页面,用户将输入其用户名和密码进行身份验证。 这对人类用户非常有用,但是有时您无法使用登录表单进行身份验证。

例如,如果您的应用程序用户不是人类用户或其他应用程序,则不适合使用表单登录。 例如,在RESTful Web服务客户端不是人工的情况下,而不是在其他服务器上运行某些其他应用程序的情况下,这也很常见。

在许多这样的场景中,您的客户端不是人工的,而是其他系统,例如,所有JMS客户端在没有用户交互的情况下生成和使用消息,并且ESB系统集成应用程序也是如此。

如果您正在处理这种情况,那么您需要考虑启用身份验证而不是表单登录。 在那种情况下,使用HTTP Basic身份验证来验证服务用户是有意义的。

HTTP基本身份验证如何工作

如果使用HTTP基本身份验证,则不使用表单,而是在HTTP请求标头上传递用户登录凭据,恰好是“授权”请求标头。 该标头允许您将用户名和密码发送到请求标头中,而不是在请求正文中发送,就像表单登录身份验证一样。 这是验证REST客户端的理想选择。

启用HTTP基本身份验证后,正在发送请求的客户端(例如,浏览器或REST客户端)将用户名和密码连接在一起,并在它们之间使用冒号,然后使用Base64编码对所得字符串进行编码。 然后将此字符串发送到请求的“ Authorization”标头中。

例如,如果您的REST客户端使用用户名"userId"和密码"passwd" ,则客户端将创建字符串"userId:passwd"并以64为基数对其进行编码,然后再将其发送到Authentication标头中。

当此请求到达服务器时,服务器将提取Authorization标头的值,并使用base64算法对密码进行解码并验证用户身份。

如果请求没有身份验证标头,则服务器将拒绝请求并返回401响应,并附加标头"WWW-AuthenticateBasic realm"以指示客户端需要在请求标头中发送用户名和密码以进行身份​​验证。

如果使用浏览器,它将读取该响应并显示一个登录对话框,以允许您输入用户名和密码。 顺便说一句,这不是发送登录凭据的最安全的方法,因为您看到的只是基于64位的编码。

有更好的方法来对用户进行身份验证,例如,使用Spring 5中引入的摘要身份验证和OAuth 2.0。稍后我将详细介绍,但如果您有兴趣,可以查看
Baeldung提供的Spring Security认证课程 ,以进一步了解它们。

如何使用XML配置在Spring Security中启用Http基本身份验证

如果您正在使用XML配置文件在应用程序中启用Spring安全性或在Spring security 3.1或更低版本上工作,则可以使用<http-basic />配置元素在Java Web应用程序中启用Http基本身份验证。

如果使用表单登录,则可以将配置文件applicationContext-security.xml<login-form>元素替换为<http-basic />

您还需要在配置文件中包含Spring安全名称空间,然后重新启动应用程序以选择此更改。 如果您不了解什么是名称空间及其如何帮助您编写简洁的配置文件,建议您阅读Craig Walls编写的Spring in Action 4th Edition 。 关于Spring框架的出色入门书籍,它基于Spring安全性和Spring引导。

启用HTTP基本身份验证的示例Spring安全配置文件如下所示:

applicationContext-security.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd"><http pattern="/home" security="none"/>
<http use-expressions="true"><intercept-url pattern="/**" access="isAuthenticated()" /><http-basic />
</http><authentication-manager><authentication-provider><user-service><user name="userId" password="passwd" authorities="ROLE_USER" /></user-service></authentication-provider>
</authentication-manager></beans:beans>Read more: http://javarevisited.blogspot.com/2018/01/how-to-enable-http-basic-authentication-spring-security-java-xml-configuration.html#ixzz54Qt8drKX

在这种情况下,只有相关信息是<http-basic />标记,该标记为整个应用程序启用HTTP基本身份验证,但让我稍微解释一下配置:

1)第一行说对于/ home,我们不需要任何安全性,因此任何人都可以访问它。

2)第二行<http>说我们正在使用Spring表达式语言,这就是为什么我们可以使用isAuthenticated()方法来拦截url的原因。 如果您不熟悉Spring表达式语言,则可以首先通过Spring Master Class进行学习。

3) <intercept-url pattern="/**" access="isAuthenticated()" />表示所有URL都需要认证,并且它们将使用HTTP基本认证机制。

4)身份验证管理器不是重点,但在这里我们使用的是内存中身份验证提供程序,其中仅配置了一个用户,用户名为"userId" ,密码为"passwd"

我们还可以使用Java配置启用相同的HTTP基本身份验证,让我们看看。

如何在Spring Security中使用Java配置启用Http Basic身份验证

如果是Java配置,则可以配置调用方法的安全性,如下所示。 使用Java配置启用HTTP Basic身份验证就像调用
httpBasic()对象上的httpBasic configure()方法传递给configure()方法。

这是启用HTTP基本身份验证代码的Spring Security配置的典型示例:

@Configuration
@EnableWebSecurity
public class HttpBasicAuthenticationAdapter extendsWebSecurityConfigurerAdapter {@Autowiredpublic void configureGlobal(AuthenticationManagerBuilder auth)throws Exception {auth.inMemoryAuthentication().withUser("userId").password("passwd").authorities("ROLE_USER");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/securityNone").permitAll().anyRequest().authenticated().and().httpBasic().realmName("Your App");}}

您可以使用诸如and()类的联接器方法来组合安全约束。 如果要关闭HTTP基本身份验证,只需删除对httpBasic()方法的调用即可。

顺便说一句,HTTP基本身份验证不是最安全的身份验证方法,因为您知道可以通过拦截流量和使用Base64算法来解码密码,但是它可以满足大多数常见需求(例如测试)。

有更好的方法可以在生产或真实世界的RESTful Web服务中执行身份验证,例如摘要身份验证。 我将在以后的文章中写更多有关此的内容,但是如果您迫不及待,那么我建议您通过Eugen Paraschiv的Spring课程学习Spring Security MasterClass和REST 。

他分享了他在使用Spring Framework和Spring Security开发RESTful Web服务方面的实际工作经验。

无论如何,这是一个很好的图表,解释了HTTP基本身份验证的工作原理,是阅读本文后记住此概念的一个很好的图表:

这就是如何在Spring Security中启用HTTP基本认证 。 您已经学习了XML和Java配置,以使用Spring安全性启用Http基本认证。 就像我说的那样,如果您正在使用Spring MVC开发RESTful Web服务,那么您需要了解如何通过使用Java代码或XML配置来启用HTTP基本身份验证以及其工作方式。 即使不利于生产,它对于测试和质量检查目的也非常有帮助。

您可能想探索的其他Spring Security文章和资源

学习Spring Security 4 Basic动手

学习Spring Security 4中级–动手

Spring MVC中@RestController和@Controller之间的区别?

Spring中@ Service,@ Component和@Controller之间的区别?

Spring中@RequestParam和@PathVaraible之间的区别?

5门学习Spring Core,Spring MVC和Spring Boot的课程

3个在线课程,可以更好地学习Spring Security

如何使用Spring Security进行基于角色的访问控制

感谢您到目前为止阅读本文,如果您喜欢本文以及我对如何在Spring Security中启用HTTP基本身份验证的解释,请与您的朋友和同事分享。

翻译自: https://www.javacodegeeks.com/2018/01/enable-http-basic-authentication-spring-security-using-java-xml-config.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/347900.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10下JDK环境变量配置与IDEA开发工具清晰简洁步骤,迈出Java学习第一步

文章目录一、JDK下载二、win10下环境变量配置三、开发工具IDEA安装一、JDK下载 可以直接去官网下载&#xff0c;推荐下载JDK8.0版本 也可以这个网盘里面找一下下载&#xff1a;Windows下JDK8.0 提取码&#xff1a;0909 安装的时候建议jdk和jre都。 二、win10下环境变量配置 …

连不上机器判断机器状态_KUKA机器人为什么KPP故障联不上,断电重启hou报RDC连接连接不上...

1.RDC连不上出现的现象: 通过指示灯的判断是最简单快捷的,如果是坏了可以直接提示RDC的故障,如果灯不亮可直接判断是RDC坏了或者是线没连上.如果RDC卡连不上,指示是不亮的!那么KSP或KPP网络断,同样会引起RDC不能读取数据,这是问什么呢?表面上看在KCB总线中KSP与KPP是串行连接的…

分布式部署_业务模块化打造单体和分布式部署同步支持方案

我在2019年中国.NET开发者峰会上为大家分享了我们的微服务电商安全工程实践&#xff0c;那次会议分享的高清录播已经上传到我的腾讯课堂&#xff0c;大家可以通过底部的小程序打开直接观看(复习)。在大会上跟大家提到&#xff0c;我们当时只有4个人的创业团队。追求的是一个既可…

html文字依次显示,利用定时器和css3动画制作文字依次渐变显示的效果

如上图&#xff0c;这种效果看着是不是挺“柔”的附代码文字一次渐变出现body{background-color: #333333;padding: 20px;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;}div,span{color: #ffffff;font-size: 30px;}.hidden{display: no…

面向Java程序员的20大Spring REST面试问题答案

大家好&#xff0c;过去两周来&#xff0c;我一直在与Spring教程共享一些REST&#xff0c;今天&#xff0c;我将向申请Web开发人员角色的Java开发人员共享一些常见的Spring和REST面试问题。 由于Spring Framework是用于开发Java Web应用程序和RESTful Web Services的最受欢迎的…

你还认识变量吗?Java基础学习不可略过的基本语法,简而不漏,变量的定义赋值和分类,系统认识Java中的变量有哪些?

文章目录变量的声明和赋值变量分类变量的声明和赋值 class VariableTest{public static void main(String[] args) {//变量的定义int myAge 21;//变量的使用System.out.println(myAge);//变量的声明int myNumber;//变量的赋值myNumber 9090;} }特别注意&#xff1a; ①定义变…

地图统计_庄园地图“出镜率”排名,500场数据统计,红教堂第一

在11赛季的时候很多玩家都私信趣游君&#xff0c;他们感觉自己排位经常会遇到一些让人讨厌的地图&#xff0c;也是因为经常遇到这些地图&#xff0c;所以导致自己的排位赛迟迟无法上分&#xff0c;因为要求我们做一下地图出镜率的排名。为了完成这个刷剧统计&#xff0c;趣游君…

2018安徽省计算机一级试题答案,2018年计算机等一级考试试题100题及参考答案.docx...

2018年计算机等一级考试试题100题及参考答案.docx文档编号&#xff1a;395397文档页数&#xff1a;14上传时间&#xff1a; 2018-09-03文档级别&#xff1a;精品资源文档类型&#xff1a;docx文档大小&#xff1a;28.84KB2018 年 计算机等一级考试试题 100 题 及参考答案 1. 在…

简自动类型提升,精度损失类型强制转换,常用转义字符,简单帮你回顾Java基本数据类型整形浮点型字符型布尔型Boolean及其运算规则

文章目录整形浮点型字符型布尔型boolean自动类型提升强制类型转换注意整形 bit是计算机中的最小存储单位。 byte是计算机中的基本存储单元。 1MB1024KB——1KB1024B&#xff08;byte&#xff09; public class JavaTest {public static void main(String[] args) {byte b1 1…

linux posix 线程池_linux多线程--POSIX Threads Programming

linux多线程自己从接触很久也有不少实践&#xff0c;但总是觉得理解不够深刻&#xff0c;不够系统。借这篇文章试着再次系统学习一下linux多线程编程&#xff0c;理解编程的concept&#xff0c;细致看一下POSIX pthread API的实现。还是凭借强大的google search&#xff0c;找到…

计算机相关货品类别,工业计算机的种类以及产品供应链

(文章来源&#xff1a;OFweek)因为工业计算机几乎是针对某种特定需求而生&#xff0c;它的型态可说是五花八门&#xff0c;如果要简单做个分类&#xff0c;可以工业计算机的类型与层级来区分。大致上有板卡、子系统与系统整合解决方案三种。板卡&#xff1a;又有单板计算机(Sin…

Java基本语法(6)--算术运算符

除号&#xff08;/&#xff09;要注意的是除数与被除数的数据类型。如果都是整型&#xff0c;那么结果还是一个整型&#xff0c;因此结果相当于是取整&#xff1b;如果至少有一浮点型&#xff0c;那么结果是浮点型&#xff0c;也就可以除到完整彻底&#xff0c;带小数点的。 前…

soapui 证书_SoapUI入门之附件上传和配置Https请求

已经欠了一堆的作业了&#xff0c;吼吼~拖延症是个大bug&#xff0c;废话不多说&#xff0c;马上进入咱们SoapUI的学习中来吧~现在开始我们的SoapUI集成测试学习之道&#xff1a;一、如何使用SoapUI进行附件上传做人还是不能这样&#xff0c;这不欺负银嘛。首先&#xff0c;我们…

pptv手机端html,影视资源持续更新,PPTV手机化身看片神器

移动终端的快速发展为人们的生活带来了多元化的娱乐享受&#xff0c;用手机观赏电影逐渐成为人们放松身心的重要选择之一。虽然在手机品牌呈井喷发展的态势下&#xff0c;支持观影的智能手机不在少数&#xff0c;要想突出重围&#xff0c;仅仅在硬件配置上做文章是远远不够的&a…

Java基本语法(8)--比较运算符

比较运算符的结果都是boolean型&#xff0c;也就是要么是true&#xff0c;要么是false。 注意 和 之分。

win7计算机管理找不到文件夹,Win7系统打开组策略提示找不到文件gpedit.msc怎么办...

组策略是Windows系统管理员为用户和计算机定义并控制程序、网络资源及操作系统行为的主要工具&#xff0c;不过有win7旗舰版系统用户在打开组策略的时候&#xff0c;却提示“找不到文件gpedit.msc&#xff0c;请确定文件名是否正确后&#xff0c;再试一次”&#xff0c;该如何解…

mysql 授权用户_MySQL创建用户与授权

一. 创建用户命令:CREATE USER usernamehost IDENTIFIED BY password;说明&#xff1a;username&#xff1a;你将创建的用户名host&#xff1a;指定该用户在哪个主机上可以登陆&#xff0c;如果是本地用户可用localhost&#xff0c;如果想让该用户可以从任意远程主机登陆&#…

Java基本语法(9)--逻辑运算符(逻辑短路)与或非

逻辑与——&——都为true才为true&#xff0c;有一false就为false&#xff0c;符号两边都看 短路与——&&——都为true才为true&#xff0c;有一false就为false&#xff0c;前面有false就略后面 逻辑或——|——有一true就为true&#xff0c;符合两边都看 短路或—…

计算机管理设置,win10系统打开计算机管理的设置步骤

win10系统使用久了&#xff0c;好多网友反馈说关于对win10系统打开计算机管理设置的方法&#xff0c;在使用win10系统的过程中经常不知道如何去对win10系统打开计算机管理进行设置&#xff0c;有什么好的办法去设置win10系统打开计算机管理呢&#xff1f;在这里小编教你只需要 …

Java基本语法(10)--位运算符

位运算符的使用对象是数&#xff0c;位运算是直接对整数的二进制进行的运算&#xff0c;理解必须要在二进制层面进行。 功能说明&#xff1a; 每<<左移1位&#xff0c;乘一次2&#xff08;低位补0&#xff09; 每>>右移一位&#xff0c;除一次2&#xff0c;符号位…