shiro配置successUrl却不跳转的问题
shiroFilter配置
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- 配置我们的登录请求地址 -->
<property name="loginUrl" value="/login" />
<!-- 配置我们在登录页登录成功后的跳转地址,
源码中fallbackUrl其实就是你shiroFilter bean里面设置的successUrl,
但是successUrl在被fallbackUrl赋值之前就已经被savedRequest.getRequestUrl()取代了,
如果真要解决,就得继承FormAuthenticationFilter -->
<!--<property name="successUrl" value="/" />-->
<!-- 如果您请求的资源不再您的权限范围,则跳转到以下请求地址 -->
<property name="unauthorizedUrl" value="/403" />
<!-- 权限配置 -->
<property name="filterChainDefinitions">
<value>
<!-- anon表示此地址不需要任何权限即可访问 -->
/static/**=anon
<!-- perms[user:query]表示访问此连接需要权限为user:query的用户 -->
/user=perms[user:query]
<!--/user=roles[normal]-->
<!-- roles[manager]表示访问此连接需要用户的角色为manager -->
/user/add=roles[manager]
/user/del/**=roles[admin]
/user/edit/**=roles[manager]
<!--所有的请求(除去配置的静态资源请求或请求地址为anon的请求)都要通过登录验证,如果未登录则跳到/login-->
/user/** = authc
</value>
</property>
</bean>
跟踪源码如下:
public static void redirectToSavedRequest(ServletRequest request, ServletResponse response, String fallbackUrl)
throws IOException {
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);
}
源码中fallbackUrl其实就是你shiroFilter bean里面设置的successUrl, 但是successUrl在被fallbackUrl赋值之前就已经被savedRequest.getRequestUrl()取代了, 如果真要解决,就得继承FormAuthenticationFilter