// 添加拦截器 Map<String, String> filterRuleMap = new LinkedHashMap<>(); //配置可以访问的路径 filterRuleMap.put("/login/**","anon"); //对所有请求认证,这一步必须放在后面,不然会有问题 //filterRuleMap.put("/**", "user"); filterRuleMap.put("/login/**", "jwt"); filterRuleMap.put("/**", "jwt"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterRuleMap);
时间: 2024-05-02 10:19:09 浏览: 22
这段代码是在shiro的配置文件中配置过滤器链,用于控制请求的访问权限。具体来说,该过滤器链包括了以下几个过滤器:
1. anon:匿名访问,即不需要认证和授权就可以访问的路径。
2. user:用户认证过滤器,即需要用户进行认证后才能访问的路径。
3. jwt:集成jwt的认证过滤器,用于对请求进行jwt认证。
在上面的代码中,首先配置了可以匿名访问的路径"/login/**",然后配置了对所有请求进行认证,但是这一步配置被注释掉了,因为这会导致所有请求都需要进行用户认证,不符合实际需求。接下来配置了"/login/**"和"/**"路径需要经过jwt认证。
需要注意的是,filterRuleMap中的键表示请求路径,值表示该请求需要经过哪个过滤器进行处理。在配置过滤器链时,过滤器的顺序非常重要,因为请求会按照过滤器链中的顺序依次进行处理。如果某个请求满足了多个过滤器的要求,那么它会按照过滤器链中的顺序依次经过这些过滤器。
相关问题
// 添加拦截器 Map<String, String> filterRuleMap = new LinkedHashMap<>(); //配置可以访问的路径 filterRuleMap.put("/login/**","anon"); //对所有请求认证,这一步必须放在后面,不然会有问题 filterRuleMap.put("/**", "user"); filterRuleMap.put("/**", "jwt"); shiroFilterFactoryBean.setFilterChainDefinitionMap(filterRuleMap); 在其他地方如何获取到filterRuleMap
在其他地方获取到 `filterRuleMap` 可以通过 `shiroFilterFactoryBean` 对象来实现。具体来说,可以在其他类中通过 `@Resource` 或者 `@Autowired` 注解来注入 `shiroFilterFactoryBean` 对象,然后就可以通过这个对象获取到 `filterChainDefinitionMap` 属性,即 `filterRuleMap`。示例如下:
```java
@Component
public class SomeClass {
@Autowired
private ShiroFilterFactoryBean shiroFilterFactoryBean;
public void someMethod() {
Map<String, String> filterRuleMap = shiroFilterFactoryBean.getFilterChainDefinitionMap();
// 可以使用filterRuleMap进行后续处理
}
}
```
在这个示例中,我们在 `SomeClass` 类中注入了 `ShiroFilterFactoryBean` 对象,并在 `someMethod` 方法中获取到了 `filterChainDefinitionMap` 属性,即 `filterRuleMap`,然后就可以对其进行后续的处理。需要注意的是,在注入 `ShiroFilterFactoryBean` 对象之前,需要保证 `ShiroFilterFactoryBean` 已经被实例化。如果使用的是 Spring Boot,可以在 `ShiroConfig` 类中使用 `@Bean` 注解来定义 `ShiroFilterFactoryBean`,这样就可以保证在其他类中注入时已经被实例化。
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean(); shiroFilterFactoryBean.setSecurityManager(securityManager); //自定义拦截器 Map<String, Filter> filtersMap = new LinkedHashMap<String, Filter>(); //访问权限配置 filtersMap.put("requestURL", getURLPathMatchingFilter()); shiroFilterFactoryBean.setFilters(filtersMap);
这段代码是一个 Java 项目中集成 Shiro 框架的配置代码,用于配置 Shiro 的过滤器链。具体来说,它创建了一个 `ShiroFilterFactoryBean` 对象,并设置了该对象的 `securityManager` 属性为一个 `SecurityManager` 对象(这里假设已经正确配置了安全管理器对象)。
接着,它自定义了一个拦截器链,即 `filtersMap`,并添加了一个名为 "requestURL" 的自定义拦截器,该拦截器是通过调用 `getURLPathMatchingFilter()` 方法获取的。这个自定义拦截器的作用是匹配当前请求的 URL 是否在权限控制的 URL 列表中,如果匹配成功则允许访问,否则拒绝访问。
最后,它将这个自定义拦截器链设置到 `ShiroFilterFactoryBean` 对象的 `filters` 属性中,然后返回该对象。
在 Shiro 中,过滤器链是指一系列的过滤器,用于对请求进行拦截和处理。在这个配置中,我们自定义了一个拦截器链,其中包含一个自定义的过滤器,用于匹配当前请求的 URL 是否在权限控制的 URL 列表中。这个过滤器链会在 Shiro 进行权限控制时被用到,用于拦截和处理请求。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)