SpringSecurity-ExceptionTranslationFilter的做用

  ExceptionTranslationFilter捕获异常并作相应的处理。处理逻辑以下:session

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

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

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

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

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

在实现体里能够给返回结果添加错误代码。好比若是要在登陆页面添加验证码,验证码填写错误抛出一个异常,这里就能够根据异常类型添加对应的错误代码,而后在登陆失败页面给出对应提示。blog

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

request.getSession().setAttribute(WebAttributes.AUTHENTICATION_EXCEPTION,
                        exception);


public static final String AUTHENTICATION_EXCEPTION = "SPRING_SECURITY_LAST_EXCEPTION";
相关文章
相关标签/搜索