CORS策略已阻止从源''在()处对XMLHttpRequest的访问:不存在“ Access-Control-Allow-Origin”标头

时间:2019-04-26 17:20:13

标签: spring-boot angular6 spring-security-oauth2

从openid connect注销时出现以下问题。

  

“从原始位置访问”(从“重定向”到)的XMLHttpRequest   “ http://localhost:8080”已被CORS政策禁止:否   请求中存在“ Access-Control-Allow-Origin”标头   资源。”

并且网络呼叫显示“已取消”状态。

这里是代码     SecurityConfig.java

@Override
    protected void configure(HttpSecurity http) throws Exception {
        LOG.info("in configure httpsecurity");
        http.csrf().disable().cors().and()
        .addFilterAfter(new OAuth2ClientContextFilter(), AbstractPreAuthenticatedProcessingFilter.class)
        .addFilterAfter(myFilter(), OAuth2ClientContextFilter.class)
        .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint(openIdConfig.getEntrypoint()))
        .and()
        .authorizeRequests()
        .antMatchers(openIdConfig.getEntrypoint()).permitAll()
        .anyRequest().authenticated()
        .and().logout()//.clearAuthentication(true)
        .logoutUrl(openIdConfig.getLogoffURL()+openIdConfig.getRedirectUri()).permitAll()
       .invalidateHttpSession(true)
          .deleteCookies(OpenIDConstants.SESSION_TOKEN, OpenIDConstants.USERNAME,
          OpenIDConstants.JSESSIONID)
          .logoutSuccessHandler(logoutSuccessHandler())
          .logoutSuccessUrl(openIdConfig.getRedirectUri());
        ;
        LOG.info("in configure httpsecurity end");
     // @formatter:on
    }

1 个答案:

答案 0 :(得分:0)

您可能确实在安全级别上启用了CORS,但没有在Web级别上启用。 要在Web级别启用CORS,您可以在方法级别,类级别或整个应用程序中启用它。

方法级别

@CrossOrigin(origins = "http://example.com")
@GetMapping(path="/")
public String homeInit(Model model) {
    return "home";
}

课程级别

@CrossOrigin(origins = "*", allowedHeaders = "*")
@Controller
public class HomeController
{
    @GetMapping(path="/")
    public String homeInit(Model model) {
        return "home";
    }
}

全局

@Configuration
@EnableWebMvc
public class CorsConfiguration extends WebMvcConfigurerAdapter
{
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedMethods("GET", "POST");
    }
}

或者,对于Spring Boot应用程序,推荐的方式:

@Configuration
public class CorsConfiguration
{
    @Bean
    public WebMvcConfigurer corsConfigurer()
    {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**");
            }
        };
    }
}