我现在正在尝试学习Spring Security,我已经看到了许多使用它的不同例子。我知道CSRF是什么,Spring Security默认启用了它。我很想知道的是这种定制。
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.authorizeRequests(request -> {
request
.antMatchers("/login").permitAll()
.anyRequest()
....more code
.csrf().csrfTokenRepository(CookieSRFTokenReppository.withHttpOnlyFalse())
这一行是什么样的定制,以及何时适合使用它。如果有人能给我一个简单的解释,我将不胜感激。
您可以在此处找到有关Cookie的httpOnly属性的其他信息:https://www.cookiepro.com/knowledge/httponly-cookie/
CSRF代表跨站点请求伪造
它是一种与请求一起发送的令牌,以防止攻击。为了使用Spring Security CSRF保护,我们首先需要确保对任何修改状态的东西(PATCH
,POST
,PUT
和DELETE
- 而不是GET
)使用正确的HTTP方法。
SpringCookiesRFTokenReposition的CSRF保护工作如下:
Set-cookie
标头,其中包含安全生成的XSRF Token使用HttpOnlyFalse
的方法允许angular读取XSRF cookie。确保 Angular 在将凭据标志设置为 true 的情况下
发出 XHR 请求。
来自< code > cookiesrftokenrepository 的代码
@Override
public CsrfToken generateToken(HttpServletRequest request) {
return new DefaultCsrfToken(this.headerName, this.parameterName,
createNewToken());
}
@Override
public void saveToken(CsrfToken token, HttpServletRequest request,
HttpServletResponse response) {
String tokenValue = token == null ? "" : token.getToken();
Cookie cookie = new Cookie(this.cookieName, tokenValue);
cookie.setSecure(request.isSecure());
if (this.cookiePath != null && !this.cookiePath.isEmpty()) {
cookie.setPath(this.cookiePath);
} else {
cookie.setPath(this.getRequestContext(request));
}
if (token == null) {
cookie.setMaxAge(0);
}
else {
cookie.setMaxAge(-1);
}
cookie.setHttpOnly(cookieHttpOnly);
if (this.cookieDomain != null && !this.cookieDomain.isEmpty()) {
cookie.setDomain(this.cookieDomain);
}
response.addCookie(cookie);
}
@Override
public CsrfToken loadToken(HttpServletRequest request) {
Cookie cookie = WebUtils.getCookie(request, this.cookieName);
if (cookie == null) {
return null;
}
String token = cookie.getValue();
if (!StringUtils.hasLength(token)) {
return null;
}
return new DefaultCsrfToken(this.headerName, this.parameterName, token);
}
public static CookieCsrfTokenRepository withHttpOnlyFalse() {
CookieCsrfTokenRepository result = new CookieCsrfTokenRepository();
result.setCookieHttpOnly(false);
return result;
}
你可以在这里探索方法
问题内容: 抱歉,如果我有点模棱两可,但是我试图了解使用Node.js而不是其他服务器端语言的真正优势。 我是JavaScript爱好者,所以我可能会玩Node.js,但我想知道是否应该在项目中使用它。 问题答案: 在V8上发生了异步非阻塞I / O 构建。 因此,我们拥有了Google JavaScript解释器V8的所有性能提升。由于JavaScript性能竞赛尚未结束,您可以期望Google
帮助文档写道: 将本地setup.py安装到您的虚拟环境/Pipfile中: $ pipenv install -e . 有人可以进一步详细说明何时以及如何使用命令与 有关? 根据,
我看到它包含了DejaVu Sans字体,但我不知道如何使用这个jar(我在网上什么也没有找到),也不知道这是否能以一种优雅、简单的方式解决我的跨平台软件。 你能告诉我更多关于这个罐子的事吗?
当我尝试 结果给我一个二维绘图框架,x轴从0到1。然而,当我尝试使用来切片向量时, 除了将行向量更改为列向量之外,它是同样的事情吗? 一般来说,,我们应该在什么情况下使用它?
问题内容: 有人向我解释什么和是谁? 我感到困惑的用例都和。 如果您还可以包括一段代码来进行解释,那将是很好的。谢谢! 问题答案: 的目标和是抽象不同的方式来输入和输出:流是一个文件,网页,或者屏幕不应该的事。重要的是您从流中接收信息(或将信息发送到该流中。) 用于阅读许多内容。 用于写很多东西。 这是一些示例代码。它假定和已经创建:
问题内容: 经常出现在Python模块中。即使阅读了Python的文档,我也不明白它的用途以及使用时间/方式。 有人可以举例说明吗? 关于我收到的基本用法的一些答案似乎是正确的。 但是,我需要了解有关工作原理的另一件事: 对我来说,最令人困惑的概念是当前的python版本如何包含未来版本的功能,以及如何使用当前版本的Python成功地编译使用未来版本的功能的程序。 我猜想当前版本包含了将来的潜在功