时间:2021-05-19
1.概述
在本快速教程中,我们将演示如何在Spring Boot应用程序中自定义Spring Security的身份验证失败处理。目标是使用表单登录方法对用户进行身份验证。
2.认证和授权(Authentication and Authorization)
身份验证和授权通常结合使用,因为它们在授予系统访问权限时起着重要且同样重要的作用。
但是,它们具有不同的含义,并在验证请求时应用不同的约束:
身份验证 - 在授权之前;它是关于验证收到的凭证;我们验证用户名和密码是否与我们的应用程序识别的用户名和密码相匹配
授权 - 用于验证成功通过身份验证的用户是否有权访问应用程序的某个功能
我们可以自定义身份验证和授权失败处理,但是,在此应用程序中,我们将专注于身份验证失败。
3. Spring Security的AuthenticationFailureHandler
Spring Security提供了一个默认处理身份验证失败的组件。
但是,我们发现于默认行为不足以满足实际要求的情况是很常见的。
如果是这种情况,我们可以创建自己的组件并通过实现AuthenticationFailureHandler接口提供我们想要的自定义行为:
public class CustomAuthenticationFailureHandler implements AuthenticationFailureHandler { private ObjectMapper objectMapper = new ObjectMapper(); @Override public void onAuthenticationFailure( HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { response.setStatus(HttpStatus.UNAUTHORIZED.value()); Map<String, Object> data = new HashMap<>(); data.put( "timestamp", Calendar.getInstance().getTime()); data.put( "exception", exception.getMessage()); response.getOutputStream() .println(objectMapper.writeValueAsString(data)); }}默认情况下,Spring使用包含错误信息的请求参数将用户重定向回登录页面。
在此应用程序中,我们将返回401响应,其中包含有关错误的信息以及错误发生的时间戳。
现在我们已经创建了自定义AuthenticationFailureHandler,让我们配置我们的应用程序并覆盖Spring的默认处理程序:
@Configuration@EnableWebSecuritypublic class SecurityConfiguration extends WebSecurityConfigurerAdapter { @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("baeldung") .password("baeldung") .roles("USER"); } @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest() .authenticated() .and() .formLogin() .failureHandler(customAuthenticationFailureHandler()); } @Bean public AuthenticationFailureHandler customAuthenticationFailureHandler() { return new CustomAuthenticationFailureHandler(); }}注意failureHandler()调用,我们可以告诉Spring使用我们的自定义组件而不是使用默认组件。
4.结论
在此示例中,我们使用Spring的AuthenticationFailureHandler接口自定义了应用程序的身份验证失败处理程序。
github源码:https://github.com/eugenp/tutorials/tree/master/spring-security-mvc-login
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
SpringSecurity是一个功能强大且可高度自定义的身份验证和访问控制框架。它是保护基于Spring的应用程序的事实上的标准。SpringSecurity
概述在本文中,我们将通过向标准登录表单添加额外字段来实现SpringSecurity的自定义身份验证方案。我们将重点关注两种不同的方法,以展示框架的多功能性以及
在PHP运行环境中配置IIS7实现基本身份验证的方法,其实IIS7身份验证的方法有好几种,比如Windows身份验证、摘要式身份验证等,相对来说IIS7基本身份
在Asp.Net框架中提供了几种身份验证方式:Windows身份验证、Forms身份验证、passport身份验证(单点登录验证)。每种验证方式都有适合它的场景
25分钟前我们在使用支付宝之前,都是要经过身份验证的,如果没有身份验证的话,支付宝是无法使用的,最近有小伙伴反映说支付宝身份验证失败了,不知道这要怎么办了?那么