自定义CustomShiroFilterFactoryBean继承ShiroFilterFactoryBean
package com.cm.interceptor.shiro;
import java.util.Map;
import javax.servlet.Filter;
import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
import org.apache.shiro.web.filter.InvalidRequestFilter;
import org.apache.shiro.web.filter.mgt.DefaultFilter;
import org.apache.shiro.web.filter.mgt.FilterChainManager;
public class CustomShiroFilterFactoryBean extends ShiroFilterFactoryBean {
@Override
protected FilterChainManager createFilterChainManager() {
FilterChainManager manager = super.createFilterChainManager();
// URL携带中文400,servletPath中文校验bug
Map<String, Filter> filterMap = manager.getFilters();
Filter invalidRequestFilter = filterMap.get(DefaultFilter.invalidRequest.name());
if (invalidRequestFilter instanceof InvalidRequestFilter) {
((InvalidRequestFilter) invalidRequestFilter).setBlockNonAscii(false);
}
return manager;
}
}
修改配置文件
<!-- Shiro Filter -->
<bean id="shiroFilter" class="com.cm.interceptor.shiro.CustomShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/" />
<property name="successUrl" value="/main/index" />
<property name="unauthorizedUrl" value="/login_toLogin" />
<property name="filterChainDefinitions">
<value>
/index.jsp = anon
/index = anon
/plugins/** = anon
/static/** = anon
/ueditor/** = anon
/uploadFiles/** = anon
/uploadFiles/files/** = anon
/code.do = anon
/login_login = anon
/login_toLogin = anon
/OfficeServer = anon
/app**/** = anon
/weixin/**/** = anon
/** = authc
</value>
</property>
</bean>