我对使用Spring安全性有很大的疑问,特别是我想知道如何保护连接到控制器的功能(GET和POST)。让我更好地解释一下,为了捍卫我不打算对具有某些角色的授权用户执行该操作,我打算即使是授权用户也要捍卫该操作。具体示例:知道对象标识符的用户直接从url调用POST表单,而不通过任何按钮/链接
答案 0 :(得分:1)
我相信您是在问:
如何阻止其他来源的POST请求?
您要说明的是:
我想确保POST请求仅来自我的表单!
Spring Security为HTML FORM自动执行此操作。我们称此功能
CSRF预防
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)
默认情况下已完成。 困惑解决了