Spring Security教程(1)---- AuthenticationException异常详解
来源:互联网 发布:linux ioctl 编辑:程序博客网 时间:2024/06/05 14:19
这个异常是在登录的时候出现错误时抛出的异常,比如账户锁定,证书失效等,先来看下AuthenticationException常用的的子类:
UsernameNotFoundException 用户找不到
BadCredentialsException 坏的凭据
AccountStatusException 用户状态异常它包含如下子类
AccountExpiredException 账户过期
LockedException账户锁定
DisabledException 账户不可用
CredentialsExpiredException 证书过期
常见的异常就这几个,还有很多不再一一赘述,仅仅为了展示,对后续的阅读没有什么影响
用户登录验证的过滤器是UsernamePasswordAuthenticationFilter,它继承自AbstractAuthenticationProcessingFilter。
今天研究的是看Spring如何处理AuthenticationException这个异常的,异常的处理一般都是doFilter中处理的,所以首先看AbstractAuthenticationProcessingFilter的doFilter中的代码
从这段代码中我们看到Spring将异常捕获后交给了unsuccessfulAuthentication这个方法来处理(InternalAuthenticationServiceException也是AuthenticationException异常的子类,这是一个内部认证服务异常)unsuccessfulAuthentication又交给了failureHandler(AuthenticationFailureHandler)来处理,然后追踪failureHandler
发现最终是由SimpleUrlAuthenticationFailureHandler这个类的onAuthenticationFailure方法来处理的,打开这个类,有两个核心方法
从onAuthenticationFailure中我们可以看出,如果没有设置defaultFailureUrl就发出401错误。(SC_UNAUTHORIZED是一个常量值是401),如果设置了defaultFailureUrl,调用saveException方法后跳转到defaultFailureUrl页面。
forwardToDestination是是否是服务器跳转,默认使用重定向即客户端跳转。
saveException字面意思是保存异常信息,其实就是把异常信息写入request或者Session中。
如果使用服务器跳转则写入request,客户端跳转则写入Session。
而key是WebAttributes.AUTHENTICATION_EXCEPTION打开WebAttributes找到这个常量
发现其值为SPRING_SECURITY_LAST_EXCEPTION,这样的话我们就可以在页面上通过el表达式来获取到这个异常了注意:saveException保存的是Session对象所以直接使用 ${SPRING_SECURITY_LAST_EXCEPTION}是获取不到异常信息的,需要使用${SPRING_SECURITY_LAST_EXCEPTION.message}
- Spring Security教程外篇(1)---- AuthenticationException异常详解
- Spring Security教程外篇(1)---- AuthenticationException异常详解
- Spring Security教程外篇(1)---- AuthenticationException异常详解
- Spring Security教程(1)---- AuthenticationException异常详解
- Spring Security教程外篇(1)---- AuthenticationException异常详解
- spring security抛出AuthenticationException异常的原因
- spring security抛出AuthenticationException异常的原因
- AuthenticationException异常详解
- spring security详解教程
- 网上的一篇spring security详解教程
- 网上的一篇spring security详解教程
- spring security异常
- Spring Security xsd 异常
- Spring Security教程(1)----SpringSecurity3.2环境搭建
- Spring Security教程(1)----SpringSecurity3.2环境搭建
- Spring Security教程(1)----SpringSecurity3.2环境搭建
- Spring Security教程(1)----SpringSecurity3.2环境搭建
- Shiro AuthenticationException 身份认证异常
- 探索 OpenStack :研究 Keystone
- 无限滑动的viewpager
- OpenCV实现图像上添加汉字
- C语言冒泡函数的封装
- Linux-/dev/tty
- Spring Security教程(1)---- AuthenticationException异常详解
- 【JSOI2008】【BZOJ1012】最大数maxnumber
- mysql一些函数常见的用法(group by、order by、....)(1)
- inux下SonarQube安装方法
- Maven和开发JAX-RS Web应用的基本示例
- Day6.16 C语言简单递归调用:用递归法求N的阶乘
- 基于C语言的字符串函数
- 使用Qt开发中国象棋(五):走棋
- UIWebView加载PDF时出现的问题