shiro学习24-shiro提供的filter-AuthenticationFilter

Shiro的AuthenticationFilter是一个抽象类,确保用户已登录。successUrl属性并非成功登录后的跳转地址,而是默认备用地址。实际场景中,如淘宝购物,登录后能返回原页面并保留状态,这是通过在session中保存上次请求信息实现的。在`WebUtils.redirectToSavedRequest()`方法中处理此逻辑。AuthenticationFilter为抽象类,未覆盖onAccessDenied方法,其子类如AuthenticatingFilter和PassThruAuthenticationFilter可能在特定场景下使用,但作者认为与实际生产环境有一定距离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AuthenticationFilter是个抽象类,需要当前用户必须登录。我们看一下他的isAccessAllowed方法:

protectedboolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) {
        Subject subject = getSubject(request, response);
        returnsubject.isAuthenticated();//判断是否登录。
}

 

 

里面有个successUrl属性,但是这个不是成功登录后跳转的地址,而是一个默认的地址。我们考虑一个在开发中经常用到的场景:我要在淘宝上买东西,在商品详情页输了买10个,但是点击确认后买后却是要求我们登录,然后登录后再跳转到当前的详情页,并且详情页的10依然存在,我之前就好奇他是怎么用一个通用的方法实现的,现在看了shiro的源码有了灵感。他的实现在shirowebutils中,我先透露一下,他是将上一次访问的urlmethod以及queryString放在了session中,然后再登录之后先检查在session中有没有之前放入的值,如果放入了就使用之前的url+method+queryString进行重定向。这里说这些只是说明这个类中的successUrl只是一个默认的,备份的路径,只有没有在session中存放的时候才会跳转到这个路径,他的javadoc上也进行了说明。

 

上面我说的这些在

org.apache.shiro.web.util.WebUtils.redirectToSavedRequest(ServletRequest, ServletResponse, String)方法中说明的,可以在我的博客中WebUtils中查看。

 

回到这个类里面,这个类是个抽象类,而且没有涉及到onAccessDenied方法,所以一定要注意。

我们继续看他的实现类:

·AuthenticatingFilter<!--[endif]-->

·PassThruAuthenticationFilter

其中在AuthenticatingFilter及其子类中我没有找到在实际中可能会用到的场景,我看了源码,但是觉得离实际生产差的很远,所以我没有记笔记,可能是我水平有限吧。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值