在JwtFilter extends AuthenticatingFilter中如何获取到filterRuleMap
时间: 2024-02-25 22:55:23 浏览: 24
在 `JwtFilter` 中获取 `filterRuleMap` 需要借助于 `ShiroFilterFactoryBean` 对象。由于 `ShiroFilterFactoryBean` 是在 Shiro 配置中定义的 Bean,因此可以通过 Spring 容器获取该 Bean 对象。
具体实现步骤如下:
1. 在 `JwtFilter` 中定义一个 `ShiroFilterFactoryBean` 类型的成员变量,用于存储从 Spring 容器获取的 `ShiroFilterFactoryBean` 对象。
```java
public class JwtFilter extends AuthenticatingFilter {
// 定义成员变量用于存储 ShiroFilterFactoryBean 对象
private ShiroFilterFactoryBean shiroFilterFactoryBean;
// 构造方法注入 ShiroFilterFactoryBean 对象
public JwtFilter(ShiroFilterFactoryBean shiroFilterFactoryBean) {
this.shiroFilterFactoryBean = shiroFilterFactoryBean;
}
// ...
}
```
2. 在 Shiro 配置中定义 `JwtFilter` 时,通过构造方法注入 `ShiroFilterFactoryBean` 对象。
```java
@Configuration
public class ShiroConfig {
// ...
@Bean
public JwtFilter jwtFilter(ShiroFilterFactoryBean shiroFilterFactoryBean) {
return new JwtFilter(shiroFilterFactoryBean);
}
// ...
}
```
3. 在 `JwtFilter` 中的 `preHandle` 方法中获取 `filterRuleMap`。
```java
public class JwtFilter extends AuthenticatingFilter {
// ...
@Override
protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception {
// 获取 filterRuleMap
Map<String, String> filterRuleMap = shiroFilterFactoryBean.getFilterChainDefinitionMap();
// ...
}
// ...
}
```
通过以上步骤,就可以在 `JwtFilter` 中获取到 `filterRuleMap` 了。需要注意的是,由于 `preHandle` 方法是在请求处理之前执行的,因此在使用 `shiroFilterFactoryBean` 对象前,需要保证 `ShiroFilterFactoryBean` 对象已经初始化完成并且注入到 `JwtFilter` 中了。