我加了基于方法的安全性并添加了角色层次结构。构建过程中我不断收到以下异常:基于SpringBoot +方法的分层角色安全性:需要ServletContext
org.springframework.beans.BeanInstantiationException:无法 实例化[org.springframework.web.servlet.HandlerMapping]:出厂 法 'defaultServletHandlerMapping' 抛出异常;嵌套0例外是java.lang.IllegalArgumentException异常:一个ServletContext是配置默认的servlet处理
我尝试了很多不同的配置方案的要求 ,没有工作...... 这里是我的基本的Web安全配置类(我加角色层次相关的豆类如你所见):
@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {
(...)
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.csrf()
.disable()
(...)
.expressionHandler(webExpressionHandler())
(...)
.anyRequest().authenticated();
httpSecurity
.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class);
}
@Bean
public SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
defaultWebSecurityExpressionHandler.setRoleHierarchy(roleHierarchy());
return defaultWebSecurityExpressionHandler;
}
@Bean
public RoleHierarchy roleHierarchy() {
RoleHierarchyImpl r = new RoleHierarchyImpl();
r.setHierarchy(Role.getHierarchy());
return r;
}
(...)
}
这里是我创建的基础上this thread独立的配置文件:
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class GlobalMethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Autowired
private RoleHierarchy roleHierarchy;
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = (DefaultMethodSecurityExpressionHandler) super.createExpressionHandler();
expressionHandler.setRoleHierarchy(roleHierarchy);
return expressionHandler;
}
}
我挣扎了好几个小时。相关主题我想在这里:
- Spring Boot + Spring Security + Hierarchical Roles
- Error creating bean with name 'defaultServletHandlerMapping
- Error creating bean with name defaultServletHandlerMapping
每一个帮助感激!