我使用的是Spring Security 3.2.0。带有Java配置的RC2。我设置了一个简单的HttpSecurity配置,要求在/v1/**上进行基本身份验证。GET请求正常,但POST请求失败:
HTTP Status 403 - Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.
我的安全配置如下所示:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Resource
private MyUserDetailsService userDetailsService;
@Autowired
//public void configureGlobal(AuthenticationManagerBuilder auth)
public void configure(AuthenticationManagerBuilder auth)
throws Exception {
StandardPasswordEncoder encoder = new StandardPasswordEncoder();
auth.userDetailsService(userDetailsService).passwordEncoder(encoder);
}
@Configuration
@Order(1)
public static class RestSecurityConfig
extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/v1/**").authorizeRequests()
.antMatchers("/v1/**").authenticated()
.and().httpBasic();
}
}
}
对此有任何帮助,非常感谢。
您还可以仅对某些请求或方法禁用CSRF检查,对超文本传输协议
对象使用如下配置:
http
.csrf().requireCsrfProtectionMatcher(new RequestMatcher() {
private Pattern allowedMethods =
Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");
private RegexRequestMatcher apiMatcher =
new RegexRequestMatcher("/v[0-9]*/.*", null);
@Override
public boolean matches(HttpServletRequest request) {
// CSRF disabled on allowedMethod
if(allowedMethods.matcher(request.getMethod()).matches())
return false;
// CSRF disabled on api calls
if(apiMatcher.matches(request))
return false;
// CSRF enables for other requests
return true;
}
});
您可以在此处看到更多信息:
http://blog.netgloo.com/2014/09/28/spring-boot-enable-the-csrf-check-selectively-only-for-some-requests/
默认情况下,通过Java配置启用CSRF保护。要禁用它,请执行以下操作:
@Configuration
public class RestSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
...;
}
}
在我们的应用程序中,我们计划使用RoleVoter机制,但我们希望删除ROLE前缀,因为我们实现的安全性更多地基于任务,而不是基于角色。 从技术上讲,实现没有问题,但我在文档中发现,不鼓励使用前缀为空的RoleVoter。 我想知道为什么? AFAICS,唯一的问题是,如果没有前缀,角色选择器将参与其不打算参与的决策(例如,,,…)May返回拒绝的访问,而不是弃权。 您能确认这是唯一一个前缀为空的
我有一个Spring Boot 1.5.12应用程序,默认情况下会启用CSRF保护。我在提交POST请求时使用CSRF令牌。 但是,有些URL需要通过GET请求获取,带有cookie信息,但不需要CSRF令牌,即。 我如何强制我的Spring Boot应用程序也需要CSRF令牌来处理这样的请求? PS:我有一些关于GET请求不需要CSRF保护的意见。但是,它也应该受到保护:https://www.
我有一个关于spring-security-oauth2 2.0.7配置的问题。我正在通过GlobalAuthenticationConfigurerAdapter使用LDAP进行身份验证: 虽然refresh令牌在spring-security-oauth2的2.0.6版中运行良好,但在2.0.7版中就不再运行了。正如这里所读的,应该设置以便在刷新期间尝试获取新的访问令牌时使用。 据我理解,这与
在我的Java项目中,我使用Lombok工具生成getter和setter<它与Maven完美配合,无需任何配置。 为什么我需要为龙目岛配置Eclipse<我已经知道如何配置Eclipse:https://projectlombok.org/download.html 为什么我必须在我的eclipse.ini中添加以下行?
我想从Stormpath帖子中对JWT令牌和CSRF提出疑问,这些令牌和CSRF解释了将JWT存储在localStorage或Cookie中的优缺点。 [...] 如果您使用JS从cookie中读取值,这意味着您不能在cookie上设置Httponly标志,因此现在站点上的任何JS都可以读取它,从而使其与在localStorage中存储内容的安全级别完全相同。 我试图理解为什么他们建议将xsrfT
问题内容: 我知道String [] args是作为参数传递给main的字符串数组。 但是,当您不将其包含为参数时(即使您不使用它),它也会引发异常。那么为什么需要它呢?另外,为什么不能是int []或boolean []? 问题答案: 这是一个字符串,因为命令行以文本形式表示。如果要将文本转换为整数或布尔值,则必须自己做- 操作系统或Java引导程序如何确切知道您希望如何解析所有内容?我想Jav