让我们通过一个示例了解如何在Spring MVC应用程序中实现基本身份验证。
要设置基本身份验证,您需要提供我们自己的HttpSecurity配置。与提供自定义登录表单类似,此设置还需要自定义WebSecurity配置适配器,如下所示。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic();
}
}
Code language: CSS (css)
这是你唯一需要做的改变。将此配置添加到应用程序后,重新启动并访问http://localhost:8080/hello。这次浏览器将显示用户名和密码对话框。不同浏览器之间的对话框本身可能会有所不同(见下图)。然而,它们都需要用户名和密码。
显示基本身份验证对话框的浏览器
提供用户名和密码后,您将看到一个“***Hello world!***”消息
您可能想知道浏览器如何知道何时请求凭据。这种独创性是RFC规范的一部分。当请求到达支持基本身份验证的服务器时,服务器必须使用401 Unauthorized
响应代码和WWW Authenticate头进行响应。此标头包含服务器支持的身份验证类型。在这种情况下,它将指定E1D1E。
默认情况下,Spring Security启用会话管理。这意味着JSESSIONID cookie将与浏览器交换以供进一步请求。此时,进一步的请求不需要授权头。但是,浏览器的默认行为是发送授权头。此行为用于客户端和服务器建立无状态通信。我们将在接下来的文章中讨论会话和状态。请记住,会话只是服务器跟踪客户端请求的概念。
我们可以完全利用基本身份验证,只需对spring配置进行一个小小的更改,就可以完全禁用会话管理。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.httpBasic()
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
}
}
Code language: CSS (css)
通过将会话创建策略设置为无状态,服务器将不再发送JSESSIONID
cookie。您可以通过进入应用程序>存储>Cookies在Chrome开发者工具中检查这一点。
当同一应用程序的多个实例在负载平衡器或网关后面运行时,这可能会有所帮助。这样,应用程序不需要像Redis一样共享公共会话存储。
1.具有基本身份验证的请求中的密码是编码的,而不是加密的。为了安全起见,仅当客户端和服务器之间的通信具有某种形式的加密(如SSL/TLS)时,才使用基本身份验证。
1.当与内存中的UserDetailService用户(如创建的默认用户)一起使用时,基本身份验证可能是最好的。如果要从数据库或第三方获取用户详细信息,性能将变得更差。
1.补充第2点,您可以通过从缓存(如Redis)加载用户详细信息来提高性能。
您可以在我们的GitHub Repository中找到此示例。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://springhow.com/basic-authentication-in-spring-boot/
内容来源于网络,如有侵权,请联系作者删除!