我试图使用以下教程实现一个Angular应用程序:https://spring.io/guides/tutorials/spring-security-and-angull-js/
登录和执行后续HTTP调用也同样有效。Angular成功地追加了CSRF令牌,Spring成功地解析了它。假设令牌为foo
,则请求将包含以下头部:
cookie:jsessionid=...;xsrf-token=foo
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated().and()
.logout().and()
.addFilterBefore(new CsrfHeaderFilter(), CsrfFilter.class);
}
CsrfHeaderFilter是教程中解释的类(它显然适用于所有其他请求)。
我意识到它晚了两个月,但我今天遵循了完全相同的指南,这篇未回复的帖子不断弹出,所以这里是解决方案。
基本上,HttpSecurity
配置程序中缺少CSRFTokenRepository()
配置。
Springcsrftokenrepository
需要标头“x-csrf-token”
,但是Angular在名为“x-xsrf-token”
的标头中发送令牌,因此指南建议您设置csrftokenrepository
的实例,该实例需要Angular默认标头“x-xsrf-token”
:
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated().and()
.logout()
.and()
//This is the first part you were missing
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterBefore(new CsrfHeaderFilter(), CsrfFilter.class);
}
@Bean
public CsrfTokenRepository csrfTokenRepository(){
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
// This is the second part you were missing
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
重复的步骤 登录 注销 从服务器登录并获取422无法验证CSRF令牌的真实性 Gems 设计3.5.2 设计令牌\u验证0.1.36 根据其他线程,解决方案是在注销时返回一个新的csrf令牌,然后在客户端的注销成功处理程序中,将XSRF-TOKEN的cookie设置为接收的令牌。我使用的代码如下。有人能告诉我为什么它不起作用吗?最后一个登录请求看起来使用了新的令牌,所以棱角分明的看起来像是从coo
我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte
问题内容: 如果在application_controller中提到了该选项,那么我可以登录并执行任何GET请求,但是在第一个POST请求上,Rails重置了会话,这使我注销。 我暂时关闭了该选项,但希望将其与Angular.js一起使用。有什么办法吗? 问题答案: 我认为从DOM读取CSRF值不是一个好的解决方案,这只是一种解决方法。 这是angularJS官方网站http://docs.ang
问题内容: 我在hapijs中使用jwt插件和策略。 我可以在登录用户时创建jwt令牌,并通过’jwt’策略使用同一令牌对其他API进行身份验证。 我将令牌设置为cookie,其中是令牌名称。另外,我没有将这些令牌保存在数据库中。 但是,注销时如何销毁jwt令牌? 请提出一种方法。 问题答案: JWT存储在浏览器中,因此删除令牌以删除客户端的cookie 如果您还需要在令牌到期之前从服务器端使令牌
嗨,我正在创建使用 REST API endpoint与服务器端通信的移动本机应用程序。 我以前有开发本机客户端的经验,但我将简单的令牌(随机生成的字符串)存储在存储用户信息的同一表中的数据库中。所以它就像浏览器中使用的会话,但每个请求的标头中都有令牌,而不是 cookie。 最近我发现了JWT令牌。这似乎是保护私有endpoint的好方法。您可以从移动客户端请求令牌,前提是您通过登录并获得生成的
问题内容: 我用了 然后我导入数据库,它显示一个错误: 问题答案: 您仅向“ charmstyle_com”数据库内的“ charmstyle_com”表授予用户权限。您可能想要的是授予“ charmstyle_com”(或至少“ adminnotification_inbox”表)中所有表的权限 或者