资讯专栏INFORMATION COLUMN

spring security登录、登出、认证异常返回值的自定义实现

mushang / 2007人阅读

摘要:在整个学习过程中,我最关心的内容有号几点,其中一点是前后端分离的情况下如何不跳转页面而是返回需要的返回值。登录成功,不跳转页面,返回自定义返回值在官方文档第节,有这么一段描述要进一步控制目标,可以使用属性作为的替代。

在整个学习过程中,我最关心的内容有号几点,其中一点是【前后端分离的情况下如何不跳转页面而是返回需要的返回值】。
下面就说一下学习结果,以xml配置位李。

登录成功,不跳转页面,返回自定义返回值

在spring官方文档5.0.12.RELEASE第6.2.3节,有这么一段描述:

要进一步控制目标,可以使用authentication-success-handler-ref属性作为default-target-url的替代。 引用的bean应该是AuthenticationSuccessHandler的一个实例。 您可以在Core Filters一章以及命名空间附录中找到更多相关信息,以及有关如何在身份验证失败时自定义流的信息。

刚开始的时候我没有注意到这个内容,后来看了spring-security-5.0.xsd文件才找到这个配置。
在xsd文件中,对这个属性是这样描述的:

 
         
            
            引用应该用于处理a的AuthenticationSuccessHandler bean成功的认证请求。 不应与之配合使用default-target-url(或always-use-default-target-url)应始终作为实现处理导航到后续目的地
                
         
      

所以实现一个AuthenticationSuccessHandler的实现类:

public class LoginAuthenticationSuccessHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {

        System.out.println("===========登陆成功================");
        PrintWriter printWriter = response.getWriter();
        Map msgMap = new HashMap<>();
        msgMap.put("result", "0");
        msgMap.put("msg", "登录成功");
        printWriter.write(new Gson().toJson(msgMap));
        printWriter.flush();
        printWriter.close();
    }
}

配置xml:

        
              
              
              
              
       
       ......
       

测试结果:

登出成功,不跳转页面,返回自定义返回值

在spring官方文档5.0.12.RELEASE第6.2.4 logout handling节,提到这个内容:

logout元素通过导航到特定URL添加了对注销的支持。 默认的注销URL是/logout,但您可以使用logout-url属性将其设置为其他内容。 有关其他可用属性的更多信息,请参见命名空间附录。

查找到对应的命名空间章节43.1.26 ,其中关于配置的说明:

//这个说明 success-handler-ref
success-handler-ref May be used to supply an instance of LogoutSuccessHandler which will be invoked to control the navigation after logging out.

根据说明需要实现LogoutSuccessHandler接口。

实现一个LogoutSuccessHandler的实现类:

public class MyLogoutSuccessHandler implements LogoutSuccessHandler {
    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {

        System.out.println("===========登出成功================");
        PrintWriter printWriter = response.getWriter();
        response.setHeader("Content-Type", "application/json;charset=utf8");
        Map msgMap = new HashMap<>();
        msgMap.put("result", "0");
        msgMap.put("msg", "退出成功");
        printWriter.write(new Gson().toJson(msgMap));
        printWriter.flush();
        printWriter.close();
    }
}

配置xml:


       
              
              
              
              
       

测试:

未登录时,如果调用接口,不报403或401错,返回自定义结果

在43.1.21 节中,提到了这样一个配置authentication-failure-handler-ref :

authentication-failure-handler-ref 可用作authentication-failure-url的替代方法,使您可以在身份验证失败后完全控制导航流。 该值应该是应用程序上下文中AuthenticationFailureHandler bean的名称。

xsd中的说明:

引用应该用于处理失败的AuthenticationFailureHandler bean验证请求。 不应与authentication-failure-url结合使用, 因为实现应始终处理导航到后续目的地

测试配置基本和登录成功一致,不啰嗦了。

总结

这样就实现了基本的前后端调用要求,避免了路径跳转。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75651.html

相关文章

  • Spring Security 进阶-细节总结

    摘要:但是我们最好不要在里面对他进行处理,而是放到配置的权限异常来处理。记得配置登录认证前和过程中的一些请求不需要身份认证。登录认证失败不能直接抛出错误,需要向前端响应异常。 关于 Spring Security 的学习已经告一段落了,刚开始接触该安全框架感觉很迷茫,总觉得没有 Shiro 灵活,到后来的深入学习和探究才发现它非常强大。简单快速集成,基本不用写任何代码,拓展起来也非常灵活和强...

    LinkedME2016 评论0 收藏0
  • Spring Security 进阶-原理篇

    摘要:过滤器基本都是通过过滤器来完成配置的身份认证权限认证以及登出。密码比对通过进行密码比对注可自定义通过获取通过获取生成身份认证通过后最终返回的记录认证的身份信息 知彼知己方能百战百胜,用 Spring Security 来满足我们的需求最好了解其原理,这样才能随意拓展,本篇文章主要记录 Spring Security 的基本运行流程。 过滤器 Spring Security 基本都是通过...

    android_c 评论0 收藏0
  • spring security安全防护

    摘要:发现无效后,会返回一个的访问拒绝,不过可以通过配置类处理异常来定制行为。恶意用户可能提交一个有效的文件,并使用它执行攻击。默认是禁止进行嗅探的。 前言 xss攻击(跨站脚本攻击):攻击者在页面里插入恶意脚本代码,用户浏览该页面时,脚本代码就会执行,达到攻击者的目的。原理就是:攻击者对含有漏洞的服务器注入恶意代码,引诱用户浏览受到攻击的服务器,并打开相关页面,执行恶意代码。xss攻击方式...

    tuantuan 评论0 收藏0
  • [译]Spring入门 - Web应用程序安全

    摘要:一旦最基本的应用创建好了,你可以给他加上安全防护。一旦成功登出了,我们的应用程序重定向到到并显示相应的登陆成功的消息。这标记该应用程序是一个应用程序,并激活一些关键行为,比如创建一个。一旦应用程序启动,用浏览器访问。 原网页 https://spring.io/guides/gs/securing-web/ 本指南将引导您完成创建一个资源由Spring Security的保护的一个简单...

    AlexTuan 评论0 收藏0

发表评论

0条评论

mushang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<