美文网首页spring security 以及 oauth2
SpringBoot+SpringSecurity+Thymel

SpringBoot+SpringSecurity+Thymel

作者: virtual灬zzZ | 来源:发表于2021-09-14 23:55 被阅读0次

    初学阶段,我们大都使用表单提交来进行登录,这里我们也采用这种方式

    表单设计大都大同小异,这里就不过多赘述,接下来我们看下后台SpringSecurity的配置

    我这里只配置了一个必要项,相信都看得懂,这样一来登录成功并且跳转到后台主界面是没有问题的,那如果登录失败我想在登录页上显示错误信息呢?

    我们知道,Spring Security对于请求是经过一系列Filter进行拦截的,其中用户登录验证这类的处理都是在UsernamePasswordAuthenticationFilter中,它继承自AbstractAuthenticationProcessingFilter。

    在AbstractAuthenticationProcessingFilter里面对于登录失败这类异常的处理都在doFilter方法中

    从这段代码我们看到它将捕获的异常都交给unsuccessfulAuthentication来处理,接下来我们看看unsuccessfulAuthentication方法

    这里看到,最终处理这些异常的是failureHandler的onAuthenticationFailure()方法

    这里我们来看看failureHandler是什么

    我们来看SimpleUrlAuthenticationFailureHandler这个类

    其中这个onAuthenticationFailure()就是错误信息的处理

    这里主要的处理操作是在saveException()方法中

    这段代码我们可以看出,异常就是保存在session中!最后看下是以什么名称保存的

    到这里我们就知道了,页面上可以通过session获取SPRING_SECURITY_LAST_EXCEPTION来获取异常信息

    因为这里session中保存的是AuthenticationException对象,我们再来看下保存的异常对象

    其继承了RuntimeException,相信大家都很熟悉,所以就不过多赘述,这里基本就清楚了,我们从session中获取到该对象后再获取当前对象的message即可

    因为对thymeleaf不够熟悉,这里怎么取session呢?

    百度之后的结果:{session.SPRING_SECURITY_LAST_EXCEPTION.message} 和{sessionScope.SPRING_SECURITY_LAST_EXCEPTION.message}

    结果发现都获取不到值

    这里在StackOverflow上找到了解决方法

    https://stackoverflow.com/questions/14042106/spring-security-sessionscope-appears-to-be-null-when-using-thymeleaf

    在该问题下找到了答案

    当然这里需要注意的一个小地方,应该是

    (一个单双引号的问题需要注意下,不要直接拷贝过来用了.)

    至此,尝试运行项目,页面已经可以显示异常信息了

    补充一下,在SpringSecurity中,关于登录的异常有以下几个:

    UsernameNotFoundException 用户找不到

    BadCredentialsException 坏的凭据

    AccountStatusException 用户状态异常它包含如下子类

    AccountExpiredException 账户过期

    LockedException 账户锁定

    DisabledException 账户不可用

    CredentialsExpiredException 证书过期

    这里的话这些提示信息是可以定制的

    后面我们将来定制一下这些异常信息,坏的凭证这样的提示太不友好了
    参考链接:
    https://www.jianshu.com/p/8fac529e5283

    相关文章

      网友评论

        本文标题:SpringBoot+SpringSecurity+Thymel

        本文链接:https://www.haomeiwen.com/subject/zqahgltx.html