<强> 1。概述强>
在本快速教程中,我们将演示如何在春天引导应用程序中自定义Spring Security的身份验证失败处理。目标是使用表单登录方法对用户进行身份验证。
<强> 2。认证和授权(身份验证和授权)强>
身份验证和授权通常结合使用,因为它们在授予系统访问权限时起着重要且同样重要的作用。
但是,它们具有不同的含义,并在验证请求时应用不同的约束:
身份验证,在授权之前,它是关于验证收到的凭证;我们验证用户名和密码是否与我们的应用程序识别的用户名和密码相匹配
授权——用于验证成功通过身份验证的用户是否有权访问应用程序的某个功能
我们可以自定义身份验证和授权失败处理,但是,在此应用程序中,我们将专注于身份验证失败。
<强> 3。Spring Security的AuthenticationFailureHandler 强>
Spring Security提供了一个默认处理身份验证失败的组件。
但是,我们发现于默认行为不足以满足实际要求的情况是很常见的。
如果是这种情况,我们可以创建自己的组件并通过实现AuthenticationFailureHandler接口提供我们想要的自定义行为:
公开课CustomAuthenticationFailureHandler 实现AuthenticationFailureHandler { 私人objectmap objectmap=new objectmap (); @Override 公共空间> @ configuration @EnableWebSecurity 公开课SecurityConfiguration 扩展WebSecurityConfigurerAdapter { @Override 保护无效配置(AuthenticationManagerBuilder身份验证) 抛出异常{ 身份验证 .inMemoryAuthentication () .withUser (“baeldung”) .password (“baeldung”) .roles(“用户”); } @Override 保护无效配置(HttpSecurity http) 抛出异常{ http .authorizeRequests () .anyRequest () .authenticated () ,() .formLogin () .failureHandler (customAuthenticationFailureHandler ()); } @ bean 公共AuthenticationFailureHandler customAuthenticationFailureHandler () { 返回新CustomAuthenticationFailureHandler (); } }
注意failureHandler()调用,我们可以告诉弹簧使用我们的自定义组件而不是使用默认组件。
<强> 4。结论强>
在此示例中,我们使用春天的AuthenticationFailureHandler接口自定义了应用程序的身份验证失败处理程序。
github源码:https://github.com/eugenp/tutorials/tree/master/spring-security-mvc-login