我加了基於方法的安全性並添加了角色層次結構。構建過程中我不斷收到以下異常:基於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
每一個幫助感激!