shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);路径被拦截
时间: 2025-01-18 17:05:18 浏览: 37
在Apache Shiro中,`shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);`是用来配置过滤器链的。通过这个方法,可以定义哪些路径需要被拦截,哪些路径不需要被拦截。
### 什么是过滤器链?
过滤器链(Filter Chain)是一个有序的过滤器列表,每个过滤器都会对请求进行处理。Shiro使用过滤器链来决定哪些请求需要经过认证和授权,哪些请求可以直接访问。
### 如何配置过滤器链?
1. **定义过滤器链**:首先,你需要定义一个`Map<String, String>`,其中键是URL模式,值是过滤器链定义。
```java
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
filterChainDefinitionMap.put("/login", "anon"); // 允许匿名访问登录页面
filterChainDefinitionMap.put("/**", "authc"); // 其他所有请求需要认证
```
2. **设置过滤器链**:然后,将这个`Map`设置给`shiroFilterFactoryBean`。
```java
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
```
### 路径被拦截的原因
如果你的路径被拦截,通常是因为过滤器链中没有正确配置。例如,如果你没有为某个路径配置`anon`过滤器,那么所有请求都会被`authc`过滤器拦截,导致需要认证才能访问。
### 示例
假设你有一个Web应用,需要配置Shiro过滤器链:
```java
@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(securityManager);
// 配置过滤器链
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authc");
shiroFilter.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilter;
}
```
在这个示例中,`/login`路径允许匿名访问,`/logout`路径配置了登出过滤器,其他所有路径都需要认证。
阅读全文
相关推荐














