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";
  • 相关阅读:
    linux线程池简单实例
    OpenCv ROI操作
    OpenCV特征点检测------ORB特征
    opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
    OpenCv学习--图像画框标记rectangle
    MATLAB 图片鼠标画框保存
    不错的Django博客
    windows下使用Redis
    前端页面模板bootstrap
    Jenkins启动Tomcat时提示Neither the JAVA_HOME nor the JRE_HOME environment variable is defined
  • 原文地址:https://www.cnblogs.com/zsxneil/p/6623489.html
Copyright © 2011-2022 走看看