首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring安全5,没有“访问控制允许源”头出现在资源上

Spring安全5,没有“访问控制允许源”头出现在资源上
EN

Stack Overflow用户
提问于 2020-05-29 12:42:33
回答 2查看 461关注 0票数 0

下面的配置类实现了WebMvcConfigurer接口并重写了addCorsMappings方法。(如此处所述:https://www.baeldung.com/spring-cors)

代码语言:javascript
复制
@Configuration
//@EnableWebMvc <- I tried with and without, no effect
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

我还拥有一个扩展WebSecurityConfigurerAdapter的配置类:

代码语言:javascript
复制
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomUserDetailsService customService = new CustomUserDetailsService();


    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http            
            .cors().and()
            .csrf().disable()
            .authorizeRequests()
            .antMatchers("/user/signup*").permitAll()
            .and()
            .authorizeRequests()
            .antMatchers("/auth*").permitAll()
            .and()
            .authorizeRequests()
            .antMatchers("/nummern/**").permitAll()
            .and()
            .authorizeRequests()
            .antMatchers("/information/").hasRole("OWNER")
            .and()
            .authorizeRequests()
            .anyRequest().authenticated()
            .and()
            .addFilter(new JwtAuthenticationFilter(authenticationManager()))
            .addFilter(new JwtAuthorizationFilter(authenticationManager()))
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }
}

每当我使用Ajax向授权端点发出HTTP请求时,就会得到以下错误:

CORS策略阻止从源'http://localhost:8080/auth?username=Example&password=Example‘访问http://localhost:8080/auth?username=Example&password=Example 'http://localhost:3000’:请求的资源上不存在“访问控制-允许-原产地”标题。

由于这种方法没有效果,我也尝试了Security 5文档中的方法,但这也不起作用:

https://docs.spring.io/spring-security/site/docs/5.0.5.RELEASE/reference/htmlsingle/#cors

我不确定这是由于我的CORS配置还是某些CSRF配置(就我而言,HttpSecurity配置应该禁用CSRF ):

代码语言:javascript
复制
2020-05-29 13:52:40.377 DEBUG 21056 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy        : /auth?username=Example&password=Example at position 3 of 15 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2020-05-29 13:52:40.378 DEBUG 21056 --- [nio-8080-exec-1] o.s.security.web.FilterChainProxy        : /auth?username=Example&password=Example at position 4 of 15 in additional filter chain; firing Filter: 'CsrfFilter'
2020-05-29 13:52:40.381 DEBUG 21056 --- [nio-8080-exec-1] o.s.security.web.csrf.CsrfFilter         : Invalid CSRF token found for http://localhost:8080/auth?username=Example&password=Example
2020-05-29 13:52:40.382 DEBUG 21056 --- [nio-8080-exec-1] o.s.s.w.header.writers.HstsHeaderWriter  : Not injecting HSTS header since it did not match the requestMatcher org.springframework.security.web.header.writers.HstsHeaderWriter$SecureRequestMatcher@4ea0d6af
2020-05-29 13:52:40.382 DEBUG 21056 --- [nio-8080-exec-1] w.c.HttpSessionSecurityContextRepository : SecurityContext is empty or contents are anonymous - context will not be stored in HttpSession.

我已经尝试过针对旧版本的Spring安全版本的各种其他建议的解决方案和CORS配置,但到目前为止,它们都没有对我的问题产生任何影响。

这似乎是一个类似问题的最新解决方案,但对我来说也不管用:

在请求的资源错误上存在Spring引导安全性无‘访问-控制-允许-源’头。

编辑:我尝试使用CORS禁用火狐扩展(以及各种HTTP ),但除了被重定向到/login端点之外,我无法看到任何不同之处,我还试图使用以下方法禁用:

代码语言:javascript
复制
  http.httpBasic().disable()

我的仍然抛出与上面提到的所有测试用例相同的错误。

编辑#2:我也尝试过:

代码语言:javascript
复制
    @Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**").allowedOrigins("http://localhost:3000");
        }
    };
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-08 09:42:30

显然,应用程序一直在使用默认配置,这导致我的安全配置没有任何效果,因此CSRF/Cors问题。

原因是在我的Application类中错误地放置了@ComponentScan注释。

组件扫描:

代码语言:javascript
复制
2020-06-08 11:28:20.764 DEBUG 5612 --- [           main] s.s.c.a.w.c.WebSecurityConfigurerAdapter : Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).
2020-06-08 11:28:20.787 DEBUG 5612 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'authenticated', for any request
2020-06-08 11:28:20.790 DEBUG 5612 --- [           main] o.s.s.w.a.i.FilterSecurityInterceptor    : Validated configuration attributes
2020-06-08 11:28:20.791 DEBUG 5612 --- [           main] o.s.s.w.a.i.FilterSecurityInterceptor    : Validated configuration attributes

没有:

代码语言:javascript
复制
2020-06-08 11:34:56.343 DEBUG 8504 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for Ant [pattern='/user/signup*']
2020-06-08 11:34:56.344 DEBUG 8504 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for Ant [pattern='/auth*']
2020-06-08 11:34:56.344 DEBUG 8504 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'permitAll', for Ant [pattern='/nummern/**']
2020-06-08 11:34:56.344 DEBUG 8504 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'hasRole('ROLE_OWNER')', for Ant [pattern='/information/']
2020-06-08 11:34:56.345 DEBUG 8504 --- [           main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'authenticated', for any request
票数 0
EN

Stack Overflow用户

发布于 2020-06-02 08:42:43

我认为它不工作,因为您没有添加您的起源(本地主机:3000),允许的起源。所以Spring不知道哪个来源可以访问。

弹簧导轨展示了如何做到这一点:

代码语言:javascript
复制
@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurer() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");
        }
    };
}

您还可以使用这里指定的第二个选项

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62086296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档