如果使用的是Web应用,确认Shiro Filter是否被正确地注册到了Spring MVC的Filter Chain中。
时间: 2024-10-05 20:02:32 浏览: 25
在Spring MVC中确保Shiro Filter被正确集成到Filter Chain中,通常涉及以下几个步骤[^1]:
1. **添加依赖**:在Spring Boot项目中,通过Maven或Gradle添加Apache Shiro的Spring MVC适配器依赖。
```xml
<!-- Maven -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.8.0</version>
</dependency>
<!-- Gradle -->
implementation 'org.apache.shiro:shiro-spring:1.8.0'
```
2. **配置WebApplicationContext**:在Spring配置文件(如applicationContext.xml或application.yml)中启用Shiro,并指定FilterChainDefinitionManager的位置。
```xml
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<!-- ... -->
</bean>
<bean id="filterChainDefinitionManager" class="org.apache.shiro.spring.web.filter.AuthorizationFilterChainManager">
<property name="securityManager" ref="securityManager"/>
</bean>
```
3. **创建FilterChainDefinition**:定义允许访问的URL和相应的权限策略,这通常在`shiro.ini`配置文件中完成。
4. **Spring MVC Filter Configuration**:在Spring MVC的配置类中,设置ShiroFilterFactoryBean,包括FilterChainDefinitionManager和其他必要的属性。
```java
@Bean(name = "shiroFilter")
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager);
// 添加其他过滤器链定义
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap());
return shiroFilterFactoryBean;
}
private Map<String, String> filterChainDefinitionMap() {
// 使用`@ShiroConfigurer`或手动创建`AuthorizationAttributeSourceAdvisor`来注入自定义逻辑
return ImmutableMap.of(
"/unprotected", "anon",
"/login", "authc"
);
}
```
5. **启动应用并测试**:启动应用,然后尝试访问不同路径以验证Shiro Filter是否按预期工作。比如,未授权的请求会被导向登录页面(`/login`),而标记为`anon`的URL则无需身份验证。
阅读全文