Spring Security方法POST和GET中的困惑

时间:2019-02-13 19:26:20

标签: spring security post spring-security get

我对使用Spring安全性有很大的疑问,特别是我想知道如何保护连接到控制器的功能(GET和POST)。让我更好地解释一下,为了捍卫我不打算对具有某些角色的授权用户执行该操作,我打算即使是授权用户也要捍卫该操作。具体示例:知道对象标识符的用户直接从url调用POST表单,而不通过任何按钮/链接

2 个答案:

答案 0 :(得分:1)

我相信您是在问:

如何阻止其他来源的POST请求?

您要说明的是:

我想确保POST请求仅来自我的表单!

Spring Security为HTML FORM自动执行此操作。我们称此功能

CSRF预防

  • C 罗斯
  • S 版本
  • R 请求
  • F 风俗

Spring Security会自动为您执行此操作。验证所有POST请求以确保其具有 CSRF令牌。 Spring在浏览器加载表单时设置的值。没有此令牌,Spring Security returns a 403 error (link)

例如:

        http
            //application security
            .mvcMatcher("/**")
            .authorizeRequests()
                .anyRequest().hasAnyRole("ADMIN","USER")
                .and()
            .httpBasic()
                .and()
            .formLogin()
        ;

已启用CSRF保护。要禁用它,我们添加.csrf().disable()

        http
            //application security
            .mvcMatcher("/**")
            .authorizeRequests()
                .anyRequest().hasAnyRole("ADMIN","USER")
                .and()
            .httpBasic()
                .and()
            .formLogin()
                .and()
            .csrf().disable()
        ;

您可以看到this user (link)如何在没有CSRF令牌的情况下无法提交POST。该用户的解决方案是禁用CSRF保护,因为默认情况下它已启用。

您的问题的答案是:您无需执行任何操作。默认情况下,CSRF保护处于启用状态。

答案 1 :(得分:0)

默认情况下已完成。 困惑解决了