java - spring security在java区域获取csrf token

标签 java spring spring-security csrf

当使用Spring Security时,我们可以使用CSRF token 。 我们可以在spring security xml中使用,在jsp中使用

> (<sec:csrfInput /> or <input type=”hidden”
> name=”${_csrf.parameterName}” value=”${_csrf.token}”/>).

但是如何获取 Java 区域中的 csrf token 名称和值呢?

我必须从我的网络应用程序中的服务层向用户发送邮件。 并且csrf token 必须存在于邮件内容中。

String html = new String( "<div style='width:600px; height:300px; margin:0 auto;'>" +
                "<h2 style='color:#FFBB00;'>lock release system</h2>" + 
                "<p style='color:#2F9D27'>your account has been locked. If you want to release the lock, you should click 'release user lock' button below." +
                "</p>" +
                "<hr>" +
                "<form action='http://122.40.73.117:9000/whiteboard/user/release-lock-user' method='post' target='_blank'>" +
                    "<input type='hidden' name='email' value='" + email + "' />" + 
                    "<input type='hidden' name='csrf' value='" + csrf + "' />" + 
                    "<button type='submit' style='font-weight:bold;'>release user lock</button>" + 
                "</form>" +     
            "</div>");

上面的代码使用了 CSRF 变量,但这只是一个虚拟变量。 如何设置 CSRF ?

最佳答案

org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository 处理 csrf token 。 它定义了一个方法 org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository#loadToken

基本上就是这样

CsrfToken token
=session.getAttribute("HttpSessionCsrfTokenRepository.CSRF_TOKEN");

您可以在代码中尝试相同的操作,但需要访问 HttpRequest 或 HttpSession,这应该不是问题。

一个 csrf token 始终属于一个 session 。 因此,只有当用户通过邮件浏览器连接到他在生成 csrf token 时使用的完全相同的 session 时,邮件中的代码才会起作用。如果他在另一台设备上打开邮件,或者在 session 超时后,这可能会出现问题。

Csrf token 是客户端和服务器之间的 secret ,以提高安全性。 通过邮件等不安全 channel 发送 csrf token 确实会消除这种安全增益。

关于java - spring security在java区域获取csrf token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39241935/

相关文章:

java - 如何在不添加 IE 驱动程序或 Chrome 驱动程序的情况下启动已安装的浏览器?

java - 线程队列使用什么设计模式

java - 请求映射 - Spring 4 - 不起作用

带 Autowiring 的 Spring 纯注释

java - 如何计算一个数字的无序分区数

Java Eclipse 统一码

java - 基本身份验证在 WebSphere 7 上不起作用

java - Spring 3.2 启动 tomcat 服务器时出错 7 - BeanFactory 未初始化或已关闭

java - 在 Spring Security 过滤器链之前设置 Cookie

java - Spring-mvc + Spring-Security + Thymeleaf - 错误解决模板