shiro不跳轉successUrl的問題

最近遇到shiro校驗框架成功後不進行自動跳轉到指定頁面;html

相關配置以下:java

<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」實際上不行;web

主要緣由是successUrl配置只是作爲一種附加配置,只有session中沒有用戶請求地址時纔會使用successUrl;spring

系統默認登陸成功後首次跳轉的地址爲,訪問系統時初次使用地址,例:若是用戶首次訪問的是http://****/aa/aa.html; apache

 那麼shiro校驗成功後跳轉的地址便可http://****/aa/aa.html; 不然shiro將跳轉到默認虛擬路徑:「/」;session

對於應用中,若是沒有註冊/路徑,則默認使用web.xml中配置的<welcom-list>配置;框架

shiro源碼邏輯以下:spa

String successUrl = null;
        boolean contextRelative = true;
        SavedRequest savedRequest = WebUtils.getAndClearSavedRequest(request);
        if (savedRequest != null && savedRequest.getMethod().equalsIgnoreCase(AccessControlFilter.GET_METHOD)) {
            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中保留的請求地址;code

相關文章
相關標籤/搜索