shiro不跳转successUrl的问题

本文探讨了Shiro框架中登录成功后未能自动跳转至指定页面的问题,并详细解释了其背后的逻辑机制及如何正确配置以实现期望的跳转行为。

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

最近遇到shiro校验框架成功后不进行自动跳转到指定页面;

相关配置如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
< bean id = "shiroFilter" class = "org.apache.shiro.spring.web.ShiroFilterFactoryBean" >
     < property name = "securityManager" ref = "securityManager" />
     < property name = "loginUrl" value = "/login" />
     < property name = "successUrl" value = "/account/user/current" />
     < property name = "filterChainDefinitions" >
         < value >
             /login = authc
             /test = authc
             /logout = logout
             /static/** = anon
             /** = authc
         </ value >
     </ property >
</ bean >

我使用的是验证过滤器是authc;逻辑上只要登录成功即可跳转至“/account/user/current”实际上不行;

主要原因是successUrl配置只是做为一种附加配置,只有session中没有用户请求地址时才会使用successUrl;

系统默认登录成功后首次跳转的地址为,访问系统时初次使用地址,例:如果用户首次访问的是http://****/aa/aa.html; 

 那么shiro校验成功后跳转的地址即可http://****/aa/aa.html; 否则shiro将跳转到默认虚拟路径:“/”;

对于应用中,如果没有注册/路径,则默认使用web.xml中配置的<welcom-list>配置;

shiro源码逻辑如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
String successUrl = null ;
        boolean contextRelative = true ;
        SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
        if (<b><span style= "color:#e53333;" >savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)</span></b>) {
            successUrl = savedRequest.getRequestUrl();
            contextRelative = false ;
        }
 
        if (successUrl == null ) {
            successUrl = fallbackUrl;
        }
 
        if (successUrl == null ) {
            throw new IllegalStateException( "Success URL not available via saved request or via the " +
                    "successUrlFallback method parameter. One of these must be non-null for " +
                    "issueSuccessRedirect() to work." );
        }
 
        WebUtils.issueRedirect(request, response, successUrl, null , contextRelative);

上述代码红色部分表明,对于成功后地址指向,会依据会话SESSION中保留的请求地址;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值