我正在我的项目中设置我的网络安全性,但是我看到一个错误。 这是错误
org.springframework.beans.factory.BeanCreationException:错误 创建名称为“ projectingArgumentResolverBeanPostProcessor”的bean 在类路径资源中定义 [org / springframework / data / web / config / ProjectingArgumentResolverRegistrar.class]: Bean实例化之前的BeanPostProcessor失败;嵌套的 异常是org.springframework.beans.factory.BeanCreationException: 创建名称为“ metaDataSourceAdvisor”的bean时出错:无法解析 设置时引用bean'methodSecurityMetadataSource' 构造函数参数;嵌套异常为 org.springframework.beans.factory.BeanCreationException:错误 创建名称为“ methodSecurityMetadataSource”的bean,定义于 类路径资源 [org / springframework / security / config / annotation / method / configuration / GlobalMethodSecurityConfiguration.class]: 通过工厂方法实例化Bean失败;嵌套异常为 org.springframework.beans.BeanInstantiationException:失败 实例化 [org.springframework.security.access.method.MethodSecurityMetadataSource]: 工厂方法'methodSecurityMetadataSource'抛出异常;嵌套的 异常是java.lang.IllegalStateException:在组成中 所有全局方法配置,实际上没有注释支持 在激活 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:510) 〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:320) 〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318) 〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:204) 〜[spring-beans-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.context.support.PostProcessorRegistrationDelegate.registerBeanPostProcessors(PostProcessorRegistrationDelegate.java:240) 〜[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.context.support.AbstractApplicationContext.registerBeanPostProcessors(AbstractApplicationContext.java:721) 〜[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:534) 〜[spring-context-5.1.5.RELEASE.jar:5.1.5.RELEASE]在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) 〜[spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于 org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于 org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于 org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.3.RELEASE.jar:2.1.3.RELEASE]位于 com.supermarket.SupermarketApplication.main(SupermarketApplication.java:19) [classes /:na]
我的鳕鱼是:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Autowired
private Environment env;
@Autowired
private UserSecurityService usersecurityservice;
private BCryptPasswordEncoder passwordencoder(){
return SecurityUtility.passwordEncoder();
}
private static final String[]PUBLIC_MATCHES = {
"/css/**",
"/js/**",
"/img/**",
"/signUp",
"/",
"/newUser",
"/forgetPassword",
"/login",
"/fonts/**",
"/bookshelf/**",
"/bookDetail/**",
"/hours",
"/faq",
"/searchByCategory",
"/searchBook"
};
@Override
protected void configure(HttpSecurity http)throws Exception{
http
.authorizeRequests().
/*antMatchers("/**").*/
antMatchers(PUBLIC_MATCHES).
permitAll().anyRequest().authenticated();
http
.csrf().disable().cors().disable()
.formLogin().failureUrl("/login?error")
.defaultSuccessUrl("/")
.successForwardUrl("/login")
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/?logout").deleteCookies("remember-me").permitAll()
.and()
.rememberMe();
}
@Autowired
public void configureGlobal (AuthenticationManagerBuilder auth) throws Exception{
auth.userDetailsService(usersecurityservice).passwordEncoder(passwordencoder());
}
} userSecurity类为:
@Service
public class UserSecurityService implements UserDetailsService {
@Autowired()
private UserRepository userRepository;
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// TODO Auto-generated method stub
try{
}catch(Exception ex){
System.out.println("Error acoured hear:");
}
User user=userRepository.findByUsername(username);
if(null==user){
throw new UsernameNotFoundException("Username not found");
}
return user;
}
当我删除“ @EnableGlobalMethodSecurity”注释程序时,它会正确运行 我以前用过这个鳕鱼,它工作正常。
答案 0 :(得分:1)
您遇到此问题是因为您没有正确注释。您应该这样添加它:@EnableGlobalMethodSecurity(prePostEnabled = true)
答案 1 :(得分:0)
您最近更新了春天吗?在以前的版本中,可以将null MethodSecurityMetadataSource
设为空,但是现在他们添加了this check,如果您没有至少启用一种方法安全性元数据源,则它们会抛出您正在获取的异常( “在所有全局方法配置的组合中,实际上未激活任何注释支持”)。当我从春季5.0.7更新到5.1.5时,这发生在我身上。这是the issue讨论此更改的地方
要解决此问题,请在@EnableGlobalMethodSecurity
批注属性中启用一个元数据源,或者,如果像我一样,您正在使用某种GlobalMethodSecurityConfiguration
,请确保方法{{1} }返回非空