EL1057E: 没有在上下文中注册 bean 解析器来解析对 bean 的访问

Posted

技术标签:

【中文标题】EL1057E: 没有在上下文中注册 bean 解析器来解析对 bean 的访问【英文标题】:EL1057E: No bean resolver registered in the context to resolve access to bean 【发布时间】:2021-06-22 05:01:24 【问题描述】:

我正在使用此资源服务器来授权请求​​,但每当它尝试评估表达式 -“@ipWhitelistingProvider.isItValid(request)”时,它会给出错误说明 - EL1057E:在上下文中没有注册 bean 解析器来解析对 bean 'ipWhitelistingProvider 的访问'。

 @Profile("default")
    @EnableResourceServer
    @EnableWebSecurity
    @Configuration
    public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter 
        @Autowired
        IpWhitelistingProvider ipWhitelistingProvider;
    
        
        @Override
        public void configure(HttpSecurity http) throws Exception 
            http
            .authorizeRequests()
            .antMatchers("/").permitAll()
            
            .antMatchers("/config/**").access("@ipWhitelistingProvider.isItValid(request) or #oauth2.hasScope('config')")
            .anyRequest().authenticated()
            .and().csrf().disable();
        

@Component("ipWhitelistingProvider")
public class IpWhitelistingProvider

    
    @Value("$ip.whitelist:1")
    List<String>whitelist;
    String ipAcessWhitelistingString;
    public boolean isItValid(HttpServletRequest request) 
        
        String ip=request.getRemoteAddr();
        if(whitelist.contains(ip)) 
            return true;
        
        else 
            return false;
        
    
        
        
        

【问题讨论】:

有同样问题的人吗? 【参考方案1】:

我通过执行以下操作设法解决了这个问题: 我的默认 OAuth2 Expression Handler 的 Bean Resolver 为 null,因此我添加了一个带有 OAuth2WebSecurityExpressionHandler 的 @Bean,它显式设置了应用程序上下文。

@Bean
    public OAuth2WebSecurityExpressionHandler oAuth2WebSecurityExpressionHandler(ApplicationContext applicationContext) 
        OAuth2WebSecurityExpressionHandler expressionHandler = new OAuth2WebSecurityExpressionHandler();
        expressionHandler.setApplicationContext(applicationContext);
        return expressionHandler;
    

在我的 ResourceServerConfigurerAdapter 中,我配置了资源并通过了上面的 bean

@Autowired
    private OAuth2WebSecurityExpressionHandler expressionHandler;

    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception 
        resources.expressionHandler(expressionHandler);
    

【讨论】:

以上是关于EL1057E: 没有在上下文中注册 bean 解析器来解析对 bean 的访问的主要内容,如果未能解决你的问题,请参考以下文章

Spring 5:以函数式方式注册 Bean

注解bean的用途

Spring通过Xml方式注册Bean的几处关键实现点

spring框架图详解

spring框架图详解

基于Spring DM管理的Bundle获取Spring上下文对象及指定Bean对象