springboot shiro 多realm多loginUrl设置(动态改变loginUrl)踩坑经历 重定向次数多

在SpringBoot集成Shiro的项目中,遇到多realm且不同角色需要不同loginUrl的问题。通过重写Shiro的redirectToLogin方法,根据请求URI中的关键字动态跳转loginUrl。然而,这可能导致重定向死循环。解决方案是调整loginUrl的设定,确保不形成登录页面互相重定向的循环,从而避免了页面疯狂重定向的问题。
摘要由CSDN通过智能技术生成

在我使用shiro时,我发现需要多个loginURL,但是框架只提供了一个角色的登陆,我在网上找到了解决方法。
参考博客

在shiro多realm的情况下,让用户访问需要认证的页面时,不同的角色肯定需要不同的loginUrl
然而shiro的ShiroFilterFactoryBean只能写入一个loginUrl,此时需要用到ShiroFilterFactoryBean的setFilters方法,下面是解决办法。

以下是解决方法:
shiro底层是通过redirectToLogin方法使未认证的用户跳转到登陆页的,那么只需要重写这个方法即可。博主的项目中,用户的loginUrl有“/usr/”和“/login关键字”,管理员的loginUrl同理,有“/admin/”和“/login“关键字,那么只需要区分这两个路径即可。通过HttpServletRequest获取请求URI,通过判断URI中的关键字,决定跳转到哪个loginUrl。那么第一步就是重写redirectToLogin方法:

public class MyAuthenticationFilter extends FormAuthenticationFilter {
   


    private static final String USR_LOGIN_URL = "/usr/page/login";
    private static final String ADMIN_LOGIN_URL = "/admin/page/login";



    @Override
    protected void redirectToLogin(ServletRequest request, ServletResponse response) throws IOException{
   

        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
     
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值