Spring boot 集成 shiro,anon(匿名)失效
shiro
xml方式:
xml的配置文件中在“filters”标签的“filterChainDefinitions”属性中添加值为anon的url;
代码方式:
filterMap.put("/user/home", “anon”);
filterMap.put("/user/home", “anon”);
filterFactoryBean.setFilterChainDefinitionMap(filterMap)
通过以上两种方式可以让自定义的fiter或者配置的filter所在位置以上的匿名(anon)配置不经过filter的拦截;
但是系统集成spring boot后,anon失效了,全部会被filter拦截,网上找了很多是代码配置的解决方案,但是没有搜到xml配置的解决方案,这里主要讲一下xml配置的解决方案(其实效果是一样的);
代码的解决方案:
@Bean
public FilterRegistrationBean registration(自定义Filter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
注:上述为最佳解决方案,既可以让filter仍然通过注入的方式让spring进行管理,同时又不会被spring默认注册;
xml的解决方案:
<bean id="guardianFilter"
class="com.cmcc.omp.sec.mdmstu.service.common.impl.GuardianShiroFilter"/>
<bean id="registrationFilter"
class="org.springframework.boot.web.servlet.FilterRegistrationBean">
<property name="filter" ref="guardianFilter"></property>
<property name="enabled" value="false"></property>
</bean>
如果需要自定义多个shiro的filter,则需要配置多个registrationFilter,在已有guardianFilter的基础上,新增一个 schoolMobileShiroFilter,org.springframework.boot.web.servlet.FilterRegistrationBean的id需要与上一个配置的不一样(命名为registrationFilter1,相当于new一个新的FilterRegistrationBean),这是因为当前提供的接口只支持传入一个filter
<bean id="schoolMobileShiroFilter"
class="com.cmcc.omp.sec.mdmstu.service.common.impl.SchoolMobileShiroFilter"/>
<bean id="registrationFilter1"
class="org.springframework.boot.web.servlet.FilterRegistrationBean">
<property name="filter" ref="schoolMobileShiroFilter"></property>
<property name="enabled" value="false"></property>
</bean>