【问题标题】:Using Spring Security with GraphQL将 Spring Security 与 GraphQL 一起使用
【发布时间】:2021-09-03 05:34:33
【问题描述】:

在我的WebSecurityConfigurerAdapter 中,我使用了以下方法:

    private final AuthenticationProvider authenticationProvider;
    private final JWTFilter jwtFilter;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) {
        auth.authenticationProvider(authenticationProvider);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .cors().disable()
                .authorizeRequests()
                .antMatchers("/graphql").permitAll()
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .addFilterBefore(jwtFilter, RequestHeaderAuthenticationFilter.class); // Filter
    }

但是,在我的 GraphQLMutationResolver 中,我无法访问以下方法(错误代码:403 - 无日志):

@PreAuthorize("isAnonymous()")
public User registerUser(String email, String passwordHash, String associationLocation) throws ChangeSetPersister.NotFoundException {
        return userService.registerUser(email, passwordHash, associationService.findAssociationByPlaceName(associationLocation));
}

关于安全配置的任何想法? - @PreAuthorize("isAnonymous()")-Part 是否正确?

【问题讨论】:

  • 在您的application.properties 文件中添加属性logging.level.spring.framework.security=TRACE。这有助于查看日志,您可以将其添加到问题中

标签: spring spring-boot spring-security graphql


【解决方案1】:

感谢@Marcus-Hert-da-Coregio,我找到了一种调试应用程序的方法,并发现问题是由我编写 HTTPSecurity-Configuration-Statements 的顺序引起的 - 类似于以下帖子: Spring security always returns HTTP 403

这对我有用(所以最后需要禁用 csrf 和 cors):

@Override
protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/graphql").permitAll()
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
                .addFilterBefore(jwtFilter, RequestHeaderAuthenticationFilter.class) // Filter
                .cors().disable()
                .csrf().disable();
}

【讨论】:

    猜你喜欢
    • 2011-01-15
    • 2011-04-16
    • 2011-01-23
    • 2014-12-20
    • 2014-12-11
    • 2015-01-25
    • 2012-10-30
    • 1970-01-01
    • 2011-11-30
    相关资源
    最近更新 更多