当前位置: 首页 > 知识库问答 >
问题:

Spring的错误

严朝明
2023-03-14

我对SpringCors有意见。

我在 chome 上收到此错误:从源“http://localhost:4200”以“http://localhost:8080/api/informationWS”访问 XMLHttpRequest 已被 CORS 策略阻止:请求的资源上不存在“访问控制-允许-源”标头。

我的文件Web安全配置适配器

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {   
    @Autowired
    private LoginService loginService;
    
    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }   
    
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {   
        auth
            .userDetailsService(loginService)
            .passwordEncoder(this.passwordEncoderAutentication());
    }
    
    @Bean
    public PasswordEncoder passwordEncoderAutentication() {
        String idForEncode = "bcrypt";
        Map<String, PasswordEncoder> encoders = new HashMap<>();
        encoders.put(idForEncode, new BCryptPasswordEncoder());
        encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());
        encoders.put("scrypt", new SCryptPasswordEncoder());
         
        PasswordEncoder passwordEncoder = new DelegatingPasswordEncoder(idForEncode, encoders);
        
        return passwordEncoder;
    }
    
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.cors();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
}

我的文件资源服务器配置适配器

@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
        .authorizeRequests()
            .antMatchers(HttpMethod.GET, "/api/informationWS").permitAll()
            .antMatchers(HttpMethod.POST, "/api/work").authenticated()
            .anyRequest().denyAll();
    }  
}

我试图以以下两种方式与Cors合作,但它们都没有工作,产生了相同的错误

我的文件cors

@Configuration
@EnableWebMvc
public class Cors implements WebMvcConfigurer {

   @Override
    public void addCorsMappings(CorsRegistry registry) {
       registry.addMapping("/**")
            .allowedOrigins("http://localhost:4200");
    }
}

我的文件Cors2

@Configuration
public class Cors {

    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilterFilterRegistrationBean(){
        List<String> host = Arrays.asList("http://localhost:4200");

        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowedOrigins(host);
        corsConfiguration.setAllowedHeaders(Arrays.asList("*"));
        corsConfiguration.setAllowedMethods(Arrays.asList("*"));
        corsConfiguration.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/api/**", corsConfiguration);

        CorsFilter corsFilter = new CorsFilter(source);
        FilterRegistrationBean<CorsFilter> filter = new FilterRegistrationBean<>(corsFilter);
        filter.setOrder(Ordered.HIGHEST_PRECEDENCE);

        return filter;
    }
}

共有1个答案

尉迟兴修
2023-03-14

您可以尝试/检查的内容:

    < li >检查应用程序代码是否已执行-可能服务器出于某种原因停止执行,因此您的spring代码无法添加标头。 < li >可能有预检请求,但服务器不允许(因此服务器再次停止执行,您的后端代码无法发送标头) < li >也许您自己在添加头之前的某个地方停止了脚本,比如< code > system . exit(0); < li >可能会重定向到不添加标题的代码,例如某些异常 < li >尝试运行来自Postman的请求-您应该不会收到错误,并且您可能会看到一些令人惊讶的内容。 < li >这样做< code >。antMatchers(HttpMethod。GET,"/api/informationWS")真的匹配请求?也许有一种方法只是为了测试而添加通配符,看看是否有效?您正在发送GET请求吗?

更多细节,技术不同但概念相同:https://dariuscoder.com/2021/09/16/how-to-debug-cors/

 类似资料:
  • 我正在使用Spring security和Oauth2。但是我是Spring Oauth2的新手,当前端处理访问资源时,我遇到了CORS错误。 我正在使用下面的筛选器来允许其他域访问该资源: 我编写了下面的代码,以允许在我的SecurityConfiguration.java中使用公共资源。 对于Oauth2,下面的代码用于保护我的oauth2serverconfig.java中的用户资源。 当我

  • 我使用Spring Redis和@Cacheable注释来实现两种方法。当我调用一个方法时,我会得到另一个方法的缓存结果。 当我使用@Cachebale注释为每个方法配置不同的缓存时,怎么可能从错误的缓存中得到结果? 安装:Spring版本4.1.6。Redis data 1.5和Redis client 2.7.0。 示例代码:

  • 问题内容: 我正在尝试使用Hibernate + Spring + JFS构建一个应用程序,但是在运行该应用程序时出现此错误,我已经搜索了此错误,但找不到任何东西。 我认为这是主要的错误: org.springframework.beans.factory.BeanCreationException:创建在ServletContext资源[/WEB- INF/applicationContext.

  • 问题内容: 更新:添加Maven依赖关系 * 更新:通过添加 Maven依赖关系 解决了该错误* 美好的一天。我有AplicationContext.xml的这一部分 Maven Dep spring和hibernate 但是,当我启动我的应用程序时,它告诉我这个错误 但是我正在使用hibernate4。这是什么魔术?=)我已经尝试过重新部署应用程序,但是结果是一样的 问题答案: 您已经错过了Sp

  • 我在研究STS数据库连接。 我试着和我当地的数据库联系。 类型异常报告 servlet的消息servlet.init()appServlet引发异常 说明服务器遇到一个内部错误,使其无法满足此请求。 我想避免这个错误。 我该怎么办?

  • 你好,我刚刚在spring boot initializer中创建了一个项目,但当我在sts中导入该项目时,我有一组错误,我不明白 错误有: