springboot shiro的filter怎么关联relam的
时间: 2023-07-16 11:15:58 浏览: 80
在 Spring Boot 中,我们可以通过配置 ShiroFilterFactoryBean 对 Shiro 进行配置。在 ShiroFilterFactoryBean 中,我们可以将一个或多个 Filter 与一个或多个 URL 路径进行关联。在这些 Filter 实例化时,我们可以将它们关联到一个或多个对应的 Realm 实例。
在 Shiro 中,Filter 实现了不同的功能,例如身份验证、授权、会话管理等。而 Realm 则是连接 Shiro 和应用程序的桥梁,它实现了从数据库、LDAP 或其他数据源中获取用户信息和权限信息的逻辑。
下面是一个使用 Shiro 和 Spring Boot 的示例代码,演示了如何将自定义的 Realm 与 Filter 关联起来:
```java
@Configuration
public class ShiroConfig {
@Bean
public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) {
ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean();
shiroFilter.setSecurityManager(securityManager);
Map<String, Filter> filters = new LinkedHashMap<>();
// 将自定义的 Filter 注入到 Spring 容器中
filters.put("authc", new CustomAuthcFilter());
shiroFilter.setFilters(filters);
Map<String, String> filterChainDefinitions = new LinkedHashMap<>();
// 定义 URL 路径与 Filter 的关系
filterChainDefinitions.put("/login", "anon");
filterChainDefinitions.put("/logout", "logout");
filterChainDefinitions.put("/**", "authc");
shiroFilter.setFilterChainDefinitionMap(filterChainDefinitions);
return shiroFilter;
}
@Bean
public SecurityManager securityManager(Realm realm) {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
// 将自定义的 Realm 注入到 SecurityManager 中
securityManager.setRealm(realm);
return securityManager;
}
@Bean
public Realm realm() {
return new CustomRealm();
}
}
```
在上面的代码中,我们通过 shirFilter() 方法创建了一个 ShiroFilterFactoryBean 实例,并将其关联到 SecurityManager 中。我们还使用 filters.put() 方法将自定义的 Filter 实例(CustomAuthcFilter)注入到 Spring 容器中,并为其设置名称("authc")。然后,我们将 URL 路径与 Filter 的关系定义在 filterChainDefinitions 中,最后将 filterChainDefinitions 设置到 ShiroFilterFactoryBean 中。在 securityManager() 方法中,我们将自定义的 Realm(CustomRealm)注入到 SecurityManager 中。
阅读全文