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

使用Spring Boot/Spring Security配置公共endpoint适用于GET,但不适用于POST

经炜
2023-03-14

我的Spring Boot应用程序提供了几个endpoint。在本文之后,我想在默认情况下限制所有endpoint,以便它们需要通过JWT令牌进行身份验证。只有某些路径是公共的。我的理解是,定义的所有路径。蚂蚁匹配器(公共资源)。permitAll()将在没有任何身份验证的情况下“公开”。

这对于GET方法很好,但是当用POST命中同一个endpoint时,我会得到一个HTTP 403(禁止)。我不明白这是为什么。

这是我当前的安全配置:

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

    private static final String[] PUBLIC_RESOURCES = {
            "/",
            "/user/login"
    };

    @Override
    protected void configure(final HttpSecurity httpSecurity) throws Exception {
        httpSecurity
                .antMatcher("/**").authorizeRequests()
                .antMatchers(PUBLIC_RESOURCES).permitAll()
                .anyRequest().authenticated();
    }
}

控制器:

@RestController
@RequestMapping(path = "user")
public class LoginController {

    @GetMapping
    public String get() {
        return "Hey, Joe (get)";
    }

    @PostMapping
    public String post() {
        return "Hey, Joe (post)";
    }
}

共有1个答案

穆英飙
2023-03-14

这可能是因为CSRF保护会影响所有改变服务器状态的请求(POST、PUT、DELETE等)。

您可以在此处阅读有关csrf的更多信息:

什么是CSRF?

如何在Spring Security中配置或禁用csrf。

我猜你想禁用它(我不推荐,因为这是一个安全功能)

如何在Spring Security中禁用csrf。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) {
        http
            .csrf(csrf -> csrf.disable());
    }
}

我强烈建议打开Spring Security调试日志记录,日志会准确地告诉您请求被拒绝的原因。

应用属性

logging.level.org.springframework.security=DEBUG
 类似资料:
  • 关于redash,我有一个问题。这是请求。在上,它工作得很好。查询示例: 但在axios上,它抛出: 网络错误 并在控制台上写: 访问XMLHttpRequest at

  • 我使用ASP.NET MVC4(VS2010 SP1,Windows 7)创建了一个网页。它也有一个api通过什么我可以做一个搜索或上传一些东西(数据和文件)。当我在VS2010 SP1的开发服务器上部署页面时,一切都正常工作,但当我选择IIS(IIS7)时,api不再工作。“issuccessStatusCode”似乎是假的。但是页面本身可以工作,可以从其他机器访问。 这是我用于内置开发服务器的

  • 我正在尝试将angular2应用程序与rails api连接起来。 为了使用rails身份验证,我希望能够在两个域之间共享cookies。当我在angular应用程序中调用http GET时,我会返回一个带有预期设置cookie字段的响应,当我发送下一个GET请求时,cookie也会随之发送。然而,当我将第二个GET替换为一个POST时,它不是。对于两个调用,我都使用withCredentials

  • 问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt

  • 所以我使用这种方法写入文件,它在windows上运行完全正常,但在mac上运行时,它会创建文件,但它们是空的。 我知道数据是正确的,因为它打印正确。感谢您的任何帮助,这真的让我绊倒了。

  • 列名称的类型为int[] 上述查询适用于postgresql,但不适用于hsqldb,甚至适用于sql 尝试的hsqldb版本:2.2.9和2.3.0 在hsqldb中工作的sql是从table_name中选择x,unnest(column_name)y(x)x和y不是该表的列。