shiro不跳转successUrl的问题

最近遇到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中保留的请求地址;

你可能感兴趣的:(shiro不跳转successUrl的问题)