如何解决如何从 GET /csrf 端点获取 CSRF 令牌?
我的目标是将 CSRF 添加到 STOMP 标头中。
我尝试过的方法确实有效,但我不确定是否应该使用它,因为我没有在 Spring Security Reference 中找到此解决方案:
- 使用 cookie(向任何未受保护的 GET 端点发送请求以获取 CSRF 令牌)
WebSecurityConfig.java
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
}
我尝试过的:
- 按照 the official reference 创建 GET /csrf 端点:
CsrfController.java
@RestController
public class CsrfController {
@RequestMapping("/csrf")
public CsrfToken csrf(CsrfToken token) {
return token;
}
}
WebSecurityConfig.java
@EnableWebSecurity // for endpoint GET /csrf to work.
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/csrf").permitAll();
}
}
- 在 SO 上关注了 this marked answer。
CsrfController.java
@RestController
public class CsrfController {
@RequestMapping("/csrf")
public String csrf(HttpServletRequest request) {
CsrfToken token = (CsrfToken)request.getAttribute(CsrfToken.class.getName());
return token.getToken();
}
}
我的预期结果是:GET /csrf 端点返回令牌值。
我的实际结果是:响应是“内部服务器错误”,还有一个错误日志。
java.lang.IllegalStateException: No primary or single public constructor found for interface org.springframework.security.web.server.csrf.CsrfToken - and no default constructor found either
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。