springboot3.x和jdk17和shiro时配置shiro过滤器不生效
时间: 2023-06-25 12:06:49 浏览: 216
如果你使用的是 Spring Boot 3.x 版本,那么可能是因为你在使用 JDK 17 而 Shiro 版本不兼容所导致的问题。
首先,你需要确认你使用的 Shiro 版本是否支持 JDK 17。如果不支持,则需要升级到支持 JDK 17 的 Shiro 版本。
另外,你还需要检查一下你的 Shiro 配置是否正确。通常情况下,你需要在 Spring Boot 中配置 Shiro 过滤器链以确保它们能够正确地生效。以下是一个示例配置:
```java
@Configuration
public class ShiroConfig {
// 配置 SecurityManager
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myRealm());
return securityManager;
}
// 配置 Realm
@Bean
public Realm myRealm() {
MyRealm realm = new MyRealm();
realm.setCredentialsMatcher(credentialsMatcher());
return realm;
}
// 配置 CredentialsMatcher
@Bean
public CredentialsMatcher credentialsMatcher() {
return new HashedCredentialsMatcher("SHA-1");
}
// 配置 ShiroFilterFactoryBean
@Bean
public ShiroFilterFactoryBean shiroFilterFactoryBean() {
ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
shiroFilterFactoryBean.setSecurityManager(securityManager());
// 配置过滤器链
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
filterChainDefinitionMap.put("/login", "anon");
filterChainDefinitionMap.put("/logout", "logout");
filterChainDefinitionMap.put("/**", "authc");
shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionMap);
return shiroFilterFactoryBean;
}
}
```
在这个配置中,我们首先配置了 Shiro 的 SecurityManager 和 Realm,然后配置了 ShiroFilterFactoryBean,并设置了过滤器链的规则。在这个例子中,所有的请求都需要进行认证,除了 `/login` 和 `/logout` 请求。
阅读全文