shiro登录流程源码追踪

本文深入探讨了Shiro框架的登录流程,从自定义过滤器方法开始,详细跟踪了登录验证过程,包括如何通过父类AuthenticatingFilter的login方法,以及自定义Token在 Realm 中的验证路径。通过对DefaultSecurityManager、RealmSecurityManager和Authenticator的分析,揭示了Shiro如何处理认证信息并委托给自定义Realm进行验证。最后,指出了在自定义 Realm 中实现登录逻辑的重要性。
摘要由CSDN通过智能技术生成

最近研究shiro这个框架,这个框架的优点就不用说了,每个业务都有登录的过程,今天来探究一下这个登录流程。

首先来理清一下流程,我的是一个web项目,当请求来的时候首先被过滤器拦下,验证token,当token验证通过之后到达controller层。在这个过程中会继承shiro的AuthenticatingFilter然后在其中重载方法中进行登录逻辑也就是shiro的login(),执行login之后会进入我们自定义的Realm中进行token验证。那他是如何走的这一边流程的呢,今天来探究一下。

重写自定义过滤器方法

继承自shiro的AuthenticatingFilter然后重写其中的三个方法
在这里插入图片描述
当请求来的时候首先进入AccessControlFilter这个类的onPreHandle()这个方法,这个方法是在进入之前进行一些判断

public boolean onPreHandle(ServletRequest request, ServletResponse response, Object mappedValue) throws Exception {
   
        return isAccessAllowed(request, response, mappedValue) || onAccessDenied(request, response, mappedValue);
}

首先判断isAccessAllowed()这个方法,这个方法是验证有没有登录过,如果登录过返回true跳过验证,过滤器放行,没有登录过则进入onAccessDenied()这个方法进行登录,如果登录成功则过滤器放行,登陆失败则要处理登录失败的逻辑,可以重写onLoginFailure()方法进行失败逻辑处理,所以自定义的过滤器实现了这两个方法。
这里解释一下,当请求来临时我们都要对token进行验证,所以我们默认判断他为false,然后在onAccessDenied()这个方法进行登录

@Override
protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {
   
    // 获取请求token,如果token不存在,则表示登录失败
    String token = getRequestToken((HttpServletRequest) request);
    if(StringUtils.isBlank(token)){
   
        // 失败逻辑处理
        return false;
    }
    // executeLogin执行登录 失败则会执行 onLoginFailure
    return executeLogin(request, response);
}
父类AuthenticatingFilter查看登录方法

点进executeLogin()之中会进入AuthenticatingFilter之中也就是自定义过滤器的父类

protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {
   
    // 获取token
    AuthenticationToken token = createToken(request, response);
    if (token == null) {
   
        String msg = "异常信息";
        throw new IllegalStateException(msg);
    }
    try {
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值