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

即使当csrf被禁用时,spring boot也会为移动请求抛出403

南宫天逸
2023-03-14

我有一个简单的spring boot应用程序,它有一个POST rest api方法来注册用户。当我通过邮递员测试它时,这工作得很完美。但当我从我的移动应用程序中测试它时,这总是抛出一个403。这在选项级别失败,因为我没有看到我的后端记录一个尝试的请求。

对于这个问题,通常的解决方案是在spring安全配置中禁用csrf。有趣的是,我这个残疾人还得403分。我已经尽我所能地寻找了很多,但还是找不到一个解决办法,为什么这仍然是失败的。感谢任何人提供的任何帮助。

下面是安全配置。

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    // Some beans that are not relevant

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/register").permitAll()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and().exceptionHandling().accessDeniedHandler(accessDeniedHandler)
                .and().sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
    }
}

我认为还值得一提的是,我还尝试过添加corsdisable选项,但没有任何效果。

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors().and().csrf().disable()
                .authorizeRequests()
                .antMatchers("/register").permitAll()
                .antMatchers("/login").permitAll()
                .anyRequest().authenticated()
                .and().exceptionHandling().accessDeniedHandler(accessDeniedHandler)
                .and().sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class);
    }

这就是我控制器的样子

@RestController
public class AuthenticationResource {

    // Wiring and other methods

    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public ResponseEntity<?> registerNewUser(@Valid @RequestBody UserRegistrationRequest request) {
        if (!request.getConfirmPassword().equals(request.getPassword())) {
            throw new MyException(ErrorUtil.generateErrorFieldsValue("password", "confirmPassword"),
                    "Passwords do not match!", HttpStatus.BAD_REQUEST);
        }

        UserAccountResponse savedUserAccount = userAccountService.save(request);
        return ResponseEntity.ok(savedUserAccount);
    }
}

如果需要任何其他细节,请告诉我。

共有1个答案

陈奇希
2023-03-14

据我所知,正如您所建议的,这与CORS有关,但是通过使用http.CORS()您告诉spring寻找一个名为corsfilter()的bean。在我的其他项目中,我就是这样解决的。

    @Bean
    public CorsFilter corsFilter() {

        UrlBasedCorsConfigurationSource configSource = new 
        UrlBasedCorsConfigurationSource();

        CorsConfiguration config = new CorsConfiguration();

        // GET , POST, HEAD
        config.applyPermitDefaultValues();

        config.addAllowedMethod(HttpMethod.PUT);
        config.addAllowedMethod(HttpMethod.DELETE);
        config.addAllowedMethod(HttpMethod.OPTIONS);

        configSource.registerCorsConfiguration("/**", config);
        return new CorsFilter(configSource);
    }

 类似资料:
  • 问题内容: 这是我的代码: 我的回应是: 500服务器错误 我打开我的变量,然后看到: POST / rest / platform / domain / list HTTP / 1.1 即使我曾经将其设置为GET,为什么也将其设置为POST ? 问题答案: 将请求方法隐式设置为POST,因为这是您要发送请求正文时的默认方法。 如果要使用GET,请删除该行并删除该行。您无需发送GET请求的请求正文

  • 问题内容: 禁止(403)CSRF验证失败。请求中止。即使使用{%csrf_token%}我正在尝试在django中进行登录,但出现此错误,我检查了CSRF文档,但对我来说没有任何用处。 这是HTML: 就像你在上面看到的那样,我使用了{%csrf_token%},并且在已安装的应用程序中有“ django.middleware.csrf.CsrfViewMiddleware”。 我的看法是: 我

  • 我正在制作一个小应用程序,我可以使用spring-boot保存用户详细信息。我创建了实体及其相应的存储库。当我发出帖子请求以添加用户的用户对象的id时,该id在保存到数据时为空base.Thisid在MySQL中自动生成(自动增量)。从POST请求中,我得到3个字段,即用户名、电子邮件、密码。用户类包含字段id、用户名、电子邮件、密码。我添加了注释 作为 id 字段。构造函数是 我的用户服务类 我

  • 问题内容: 即使执行catch块并抛出第二个Exception,也会在此代码中进行设置? 问题答案: 是的,finally块始终运行…除非以下情况: 运行try-catch-finally块的线程被杀死或中断 你用 基础虚拟机以其他方式被破坏 基础硬件在某种程度上无法使用 另外,如果您的finally块中的方法抛出未捕获的异常,则此后将不执行任何操作(即,该异常将像在其他任何代码中一样被引发)。发

  • 问题内容: 在花了最后一天使这项工作完成之后,我发现我回过头来遇到开始时遇到的相同错误: 错误:意外请求:GET test-directive.html 我正在使用Karma和Jasmine在Angular中测试指令。我在StackOverflow上浏览了类似的问题,但发现在其他示例中尝试过的所有方法均无济于事。 代码结构 Test-App -src --bower --lib --js --mo

  • 错误: 错误:在XMLHttpRequest.HandleError(XHR.JS:99)的createError(createError.js:16)处出现网络错误。CORS策略阻止了从源“http://localhost:3001/user/login”访问“http://localhost:3000”处的XMLHttpRequest:“请求头字段Access-Control-Allog-Or