web.xml配置详解_如何使用Java和XML Config在Spring Security中启用HTTP基本身份验证

web.xml配置详解

web.xml配置详解

在上一篇文章中,我向您展示了如何在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"并以base 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 extends
    WebSecurityConfigurerAdapter {

  @Autowired
  public void configureGlobal(AuthenticationManagerBuilder auth)
      throws Exception {
    auth
    .inMemoryAuthentication()
    .withUser("userId").password("passwd")
    .authorities("ROLE_USER");

  }

  @Override
  protected 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 MasterClassREST

他分享了他在使用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

web.xml配置详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值