Java 弹簧靴、Cors和弹簧安全

Java 弹簧靴、Cors和弹簧安全,java,spring-boot,spring-security,cors,Java,Spring Boot,Spring Security,Cors,我使用的是SpringBootVersion2.0.8.RELEASE和SpringBootStart安全模块。 我试图用基本的身份验证来保护我的招摇过市的端点,到目前为止一切都很顺利。 但是,在我的代码中,来自javascript的请求开始失败,出现以下错误 Access to XMLHttpRequest at 'http://my-service.com.com/search/api/getQuery' from origin 'http://myui.com' has been bloc

我使用的是SpringBootVersion2.0.8.RELEASE和SpringBootStart安全模块。 我试图用基本的身份验证来保护我的招摇过市的端点,到目前为止一切都很顺利。 但是,在我的代码中,来自javascript的请求开始失败,出现以下错误

Access to XMLHttpRequest at 'http://my-service.com.com/search/api/getQuery' from origin 'http://myui.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
我定义了以下配置类

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //See https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc-cors-global-java for configuring cors
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("*").allowedHeaders("*");
    }

}
我的API类上有
@CrossOrigin
注释。 我有下面的类来配置我的安全性

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    protected void configure(HttpSecurity http) throws Exception {
        http.cors()
             .and()
             .csrf().disable()
                .authorizeRequests()
                    .antMatchers("/v2").authenticated()
                    .antMatchers("/swagger-resources").authenticated()
                    .antMatchers("/swagger-ui.html").authenticated()                    
                    .and()
                    .httpBasic()
                    .and()
                    .authorizeRequests()    
                        .antMatchers("/**").permitAll()
                        .and();        

    }

    }
我尝试在安全类中创建一个CORSCOConfiguration并删除@CrossOrigin注释,但也没有成功。 你知道我需要做什么才能让cors在Spring Boot 2.0.8.RELEASE上正常工作吗

谢谢
根据我的经验,Spring注释从未成功解决CORS问题。 我喜欢的解决方案是通过虚拟主机路由两个服务器(在我的例子中是Node和Tomcat)

在我的apachehttpd vhosts配置文件中,我有以下设置

    ProxyRequests Off
    ProxyPreserveHost Off
    <Proxy *>
        Order deny,allow
        Allow from all
    </Proxy>

    <Location /FrontEndServer>
        ProxyPass        http://localhost:8080/FrontEndServer connectiontimeout=333 timeout=999
        ProxyPassReverse http://localhost:8080/FrontEndServer
    </Location>

    <Location />
        ProxyPass        http://localhost:3000/ connectiontimeout=333 timeout=999
        ProxyPassReverse http://localhost:3000/
    </Location>
ProxyRequests关闭
代理主机关闭
命令拒绝,允许
通融
ProxyPasshttp://localhost:8080/FrontEndServer connectiontimeout=333超时=999
ProxyPassReversehttp://localhost:8080/FrontEndServer
ProxyPasshttp://localhost:3000/ connectiontimeout=333超时=999
ProxyPassReversehttp://localhost:3000/
在这个设置中,我的两台服务器运行在不同的端口上,但Apache正在重新路由它们,以便它们可以共享我的本地主机,并通过“/”或“/FrontEndServer”来区分


显然,这是特定于Apache的,并且可能不是您正在使用的设置。但是,您应该能够使用这些原则为您的具体情况找到解决方案。希望这有帮助

是的,这会起作用,但不幸的是,我正在部署到Pivotal cloud foundry,我们没有这种设置,我们可以在其中配置web服务器,因为我们希望使部署尽可能简单您的前端JavaScript代码正在触发浏览器发送CORS飞行前选项请求,服务器会用3xx重定向进行响应。它需要用2xx的成功消息来回应。@sideshowbarker我不认为这个问题是重复的。我正在按照Spring站点的要求跟踪文档,我发现了这个错误。我不想一起破解一个解决方案,因为这样会导致更多麻烦问题中引用的错误消息表示您向其发送请求的服务器使用3xx重定向而不是2OO OK来响应选项请求。这正是问题中描述的问题,这被标记为重复。为了让这里的其他人能够帮助您,您需要更新问题,例如,服务器试图将请求重定向到哪个URL的详细信息。基本上,在另一个问题中已经描述了,这是重复的。现在写的这个问题并没有说明知道重定向是个问题。@sideshowbarker这个问题是专门关于spring启动设置和配置的。你的答案是ASP.net。这是一个需要自行解决的相关问题