zoukankan      html  css  js  c++  java
  • SpringSecurity-ExceptionTranslationFilter的作用

      ExceptionTranslationFilter捕获异常并做相应的处理。处理逻辑如下:

      1.首先判断是不是SpringSecurity产生的异常,如果是将在handleSpringSecurityException(request, response, chain, ase)处理,否则抛出ServletException/RuntimeException;

      2.handleSpringSecurityException方法首先判断是否是AuthenticationException异常,如果是就跳转到登录页面;否则如果是AccessDeniedException,先判断是否是匿名用户,如果是,也将跳转到登录页面,如果是已认证用户,则交给accessDeniedHandler处理。

      3.跳转到登录界面前,HttpSessionRequestCache会保存当前请求的url,登录认证通过后会直接跳转到之前访问的页面。使用这个功能不能将<form-login>的always-use-default-target属性设置为TRUE,默认是FALSE的。这个逻辑在SavedRequestAwareAuthenticationSuccessHandler中处理。

      4.捕获异常跳转页面时可以根据异常类型在url后面添加对应错误代码,以便在登录页面给出提示信息。一个简单的实现是继承LoginUrlAuthenticationEntryPoint类,然后重写

    1 protected String determineUrlToUseForThisRequest(HttpServletRequest request,
    2             HttpServletResponse response, AuthenticationException exception) {
    3 
    4         return getLoginFormUrl();
    5     }

    在实现体里可以给返回结果添加错误代码。比如如果要在登录页面添加验证码,验证码填写错误抛出一个异常,这里就可以根据异常类型添加对应的错误代码,然后在登录失败页面给出对应提示。

      5.对于登录时产生的异常,默认的SimpleUrlAuthenticationFailureHandler已经把异常放置到了session中,以便跳转后的页面使用。

    request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION,
                            exception);
    
    
    public static final String AUTHENTICATION_EXCEPTION = "SPRING_SECURITY_LAST_EXCEPTION";
  • 相关阅读:
    JVM启动参数小结
    Java 线程池学习
    myeclipse 8.5安装freemarker插件方法
    开源文件比较工具:WinMerge、KDiff3、diffuse
    初探淘宝技术构架
    Java获取IP地址:request.getRemoteAddr()注意
    Spring MVC 教程,快速入门,深入分析
    分布式服务框架 Zookeeper -- 管理分布式环境中的数据
    YARN作业提交流程剖析
    经典的MapReduce1解析
  • 原文地址:https://www.cnblogs.com/zsxneil/p/6623489.html
Copyright © 2011-2022 走看看