在使用 Java Spring Boot 后端框架中,您可以使用 CsrfToken
和CookieCsrfTokenRepository
(Spring Security JWT) 来生成 CSRF Token 并将其放入 Cookie 中。 然后,您可以通过发送 AJAX 请求来获取并存储该值。
以下是生成 CSRF Token 的Java Spring Boot代码示例:
java
import javax.servlet.http.HttpServletRequest; import org.springframework.security.web.csrf.CsrfToken; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.util.WebUtils; @RestController public class CsrfController { @GetMapping("/api/get-csrf-token") public Map<String, String> getCsrfToken(HttpServletRequest request) { CsrfToken csrfToken = (CsrfToken) request.getAttribute(CsrfToken.class.getName()); if (csrfToken == null) { return Collections.emptyMap(); } String tokenValue = csrfToken.getToken(); String cookieName = WebUtils.getCookie(request, "XSRF-TOKEN").getValue(); return Collections.singletonMap("csrfToken", tokenValue); } }
然后,您可以使用 Vue.js 将返回的 CSRF Token 存储在 Vuex 状态管理库(或简单地保存在 Vue 实例中) 中。以下是Vue.js的代码示例:
javascript
import axios from 'axios'; new Vue({ // ... created() { axios.get('/api/get-csrf-token') .then(response => { this.$store.commit('setCsrfToken', response.data.csrfToken); }).catch(error => { console.log(error.message); }); }, // ... });
现在,在Axios库中,在所有应用程序的AJAX请求中添加X-Csrf-Token标头作为Cookie的值如下所示:
javascript
import axios from 'axios'; const token = store.state.csrfToken; axios.interceptors.request.use(config => { if (token) { config.headers['X-CSRF-TOKEN'] = token; } return config; });
您现在可以通过存储在 Vuex 状态管理库(或Vue实例中) 中生成的 CSRF Token 来安全地防范CSRF攻击。