【发布时间】:2019-01-04 05:28:35
【问题描述】:
我正在尝试将基于 Spring MVC xml 的项目配置重构为基于 Spring Boot java 的配置。同时设置 shiro 配置如下:
@Configuration
public class ShiroConfig {
@Bean
public Realm realm() {
JdbcRealm myRealm = new JdbcRealm();
myRealm.setCredentialsMatcher(sha256Matcher());
myRealm.setPermissionsLookupEnabled(true);
myRealm.setSaltStyle(JdbcRealm.SaltStyle.COLUMN);
return myRealm;
}
@Bean
public HashedCredentialsMatcher sha256Matcher() {
HashedCredentialsMatcher sha256Matcher = new HashedCredentialsMatcher();
sha256Matcher.setHashAlgorithmName("SHA-256");
return sha256Matcher;
}
@Bean
public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
return new LifecycleBeanPostProcessor();
}
@Bean
public CacheManager cacheManager() {
return new MemoryConstrainedCacheManager();
}
@Bean
public Filter jwtv() {
return new JWTVerifyingFilter();
}
@Bean
public Filter ljwtv() {
return new LimitedAccessJWTVerifyingFilter();
}
@Bean
public Filter logout() {
LogoutFilter logoutFilter = new LogoutFilter();
logoutFilter.setRedirectUrl("/login.jsp");
return logoutFilter;
}
@Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();
chainDefinition.addPathDefinition("/login", "authc");
chainDefinition.addPathDefinition("/logout", "logout");
chainDefinition.addPathDefinition("/my/test/**", "anon");
chainDefinition.addPathDefinition("/my/xyz/**/abc", "ljwtv"); chainDefinition.addPathDefinition("/my/xyz/**/mno", "ljwtv");
chainDefinition.addPathDefinition("/my/**", "jwtv");
return chainDefinition;
}
}
我遇到以下错误:
启动 Tomcat 上下文时出错。例外: org.springframework.beans.factory.BeanCreationException。信息: 创建名为“filterShiroFilterRegistrationBean”的 bean 时出错 在类路径资源中定义 [org/apache/shiro/spring/config/web/autoconfigure/ShiroWebFilterConfiguration.class]: 通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.boot.web.servlet.FilterRegistrationBean]:工厂 方法“filterShiroFilterRegistrationBean”抛出异常;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“shiroFilterFactoryBean”的 bean 时出错:FactoryBean 在创建对象时抛出异常;嵌套异常是 java.lang.IllegalArgumentException:没有名称的过滤器 'jwtv' 应用于可用过滤器池中的链 [/my/**]。 确保具有该名称/路径的过滤器首先在 addFilter 方法。
自定义文件管理器JWTVerifyingFilter 是一个扩展org.apache.shiro.web.filter.AccessControlFilter 的@Component。不知道我错过了什么,这一切都适用于 xml 配置。请帮忙。
【问题讨论】:
-
你能在 GitHub(或其他地方)上整理一个示例项目,我会尝试看看
-
@BrianDemers github.com/bibekhadka/demo 在这里。感谢您的宝贵时间。
标签: java spring spring-mvc spring-boot shiro