时间:2021-05-19
一、需要自定义登录结果的场景
在我之前的文章中,做过登录验证流程的源码解析。其中比较重要的就是
但是在web应用开发过程中需求是千变万化的,有时需要我们针对登录结果做个性化处理,比如:
以上的这些情况,使用Spring Security作为安全框架的时候,都需要我们使用本节学到的知识进行自定义的登录验证结果处理。
二、自定义登陆成功的结果处理
为了满足上面的需求,我们该如何去做呢?下面一小节我们来说明一下。AuthenticationSuccessHandler接口是Security提供的认证成功处理器接口,我们只需要去实现它即可。但是通常来说,我们不会直接去实现AuthenticationSuccessHandler接口,而是继承SavedRequestAwareAuthenticationSuccessHandler 类,这个类会记住用户上一次请求的资源路径,比如:用户请求books.html,没有登陆所以被拦截到了登录页,当你万成登陆之后会自动跳转到books.html,而不是主页面。
@Componentpublic class MyAuthenticationSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { //在application配置文件中配置登陆的类型是JSON数据响应还是做页面响应 @Value("${spring.security.logintype}") private String loginType; private static ObjectMapper objectMapper = new ObjectMapper(); @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws ServletException, IOException { if (loginType.equalsIgnoreCase("JSON")) { response.setContentType("application/json;charset=UTF-8"); response.getWriter().write(objectMapper.writeValueAsString(AjaxResponse.success())); } else { // 会帮我们跳转到上一次请求的页面上 super.onAuthenticationSuccess(request, response, authentication); } }}三、自定义登录失败的结果处理
这里我们同样没有直接实现AuthenticationFailureHandler接口,而是继承SimpleUrlAuthenticationFailureHandler 类。该类中默认实现了登录验证失败的跳转逻辑,即登陆失败之后回到登录页面。我们可以利用这一点简化我们的代码。
@Componentpublic class MyAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { //在application配置文件中配置登陆的类型是JSON数据响应还是做页面响应 @Value("${spring.security.logintype}") private String loginType; private static ObjectMapper objectMapper = new ObjectMapper(); @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { if (loginType.equalsIgnoreCase("JSON")) { response.setContentType("application/json;charset=UTF-8"); response.getWriter().write( objectMapper.writeValueAsString( AjaxResponse.error( new CustomException( CustomExceptionType.USER_INPUT_ERROR, "用户名或密码存在错误,请检查后再次登录")))); } else { response.setContentType("text/html;charset=UTF-8"); super.onAuthenticationFailure(request, response, exception); } }}四、配置SecurityConfig
@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Resource private MyAuthenticationSuccessHandler myAuthenticationSuccessHandler; @Resource private MyAuthenticationFailureHandler myAuthenticationFailureHandler; @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() //禁用跨站csrf攻击防御,后面的章节会专门讲解 .formLogin() .successHandler(myAuthenticationSuccessHandler) .failureHandler(myAuthenticationFailureHandler) .defaultSuccessUrl("/index")//登录认证成功后默认转跳的路径 .failureUrl("/login.html") //登录认证是被跳转页面}总结
以上所述是小编给大家介绍的SpringSecurity自定义登录验证成功与失败的结果处理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
1.概述在本快速教程中,我们将演示如何在SpringBoot应用程序中自定义SpringSecurity的身份验证失败处理。目标是使用表单登录方法对用户进行身份
springsecurity是一个很大的模块,本文中只涉及到了自定义参数的认证。springsecurity默认的验证参数只有username和password
SpringSecurity是一个功能强大且可高度自定义的身份验证和访问控制框架。它是保护基于Spring的应用程序的事实上的标准。SpringSecurity
本文实例讲解了jQueryValidate表单验证插件,如何自定义一个验证方法,分享给大家供大家参考,具体内容如下效果如下:验证失败效果:验证成功效果:具体步骤
概述在本文中,我们将通过向标准登录表单添加额外字段来实现SpringSecurity的自定义身份验证方案。我们将重点关注两种不同的方法,以展示框架的多功能性以及