Shiro快速入门 —— 2.拦截器

ShiroFilter拦截器是整个Shiro的入口,用于拦截需要安全控制的请求并进行处理。
shiro封装了很多不同用途的拦截器,这里只介绍几个比较常用的拦截器,更详细介绍可以参考博文
《第八章拦截器机制——跟我学Shiro》:http://jinnianshilongnian.iteye.com/blog/2025656

登录拦截器(FormAuthenticationFilter)

由于此拦截器经常需要继承并重写里面的方法,来扩展自己的登录拦截规则,所以会进行详细介绍。

等录拦截器主要有两个作用

  1. 拦截登录表单提交的路径(在拦截器工厂中配置)。

    创建登录认证所需要的Token令牌,并进入登录认证流程。

  2. 拦截要求登录才可以访问的路径时(在拦截规则中配置)。

    如果已经登录则直接进入到要访问路径,如果未登录则访问被拒绝并跳转到登录页。

方法介绍

createToken( ):

此方法用于创建登录认证令牌,令牌内存储了登录认证时所需的数据。当我们需要扩展shiro原有令牌的时候会重写此方法,将扩展的令牌字段存入令牌。最典型的例子就是在令牌中增加了验证码字段。(令牌会在其他章节另作介绍)

/**
 * 创建Token
 */
@Override
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) {
   
    String username = getUsername(request);//获取用户名 表单name:username
    String password = getPassword(request);//获取密码 表单name:password
    boolean rememberMe = isRememberMe(request);//获取是否记住我 表单name:rememberMe
    String captchaId = WebUtils.getCleanParam(request, "captchaId");//获取验证码id
    String captcha = WebUtils.getCleanParam(request, "captcha");//获取用户输入的验证码字符

    return new CaptchaAuthenticationToken(username, password,captchaId, captcha, rememberMe);//存入自己定义的包含验证码的Token
}

onLoginSuccess( ):

登录认证成功后的行为。此方法只有在进行登录认证成功后访问一次。之后再访问页面时不会调用此方法。

onAccessDenied( ):

访问被拒绝后的行为。在拦截规则中指定需要登陆后才能访问的路径,如果没有登录则认为访问被拒绝。

此方法处理访问被拒绝后的逻辑,最常见的就是对于ajax访问拒绝的特殊处理。

此方法处理完成后,默认行为会跳转到登录页(可以在拦截器工厂中配置 或 setLoginUrl方法设置登陆页)。

这里要注意如果是登录操作,拦截器会先拦截并判定为拒绝访问进入到此方法,然后再去进行创建Token和登录认证等操作。

setLoginUrl( ):

设置登陆页路径。默认/login.jsp,可以在拦截器工厂中配置 或 使用此方法重置。

访问被拒绝时我们可以使用此方法返回到其他登陆页面,而不是之前的登录页。

@Override
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值