我正在使用spring mvc 4.3版本。我们使用的是默认的spring csrf。在其中一个场景中,我收到无效的令牌错误,但我看到令牌,无论我得到的是什么,都被发送到服务器。有没有什么办法可以让日志消息看到服务器响应,看看生成的csrf令牌。在我正在使用标签的UI JSP页面上,在页面视图源中,我可以看到令牌。但我希望在服务器端的过滤器中看到,以确保我的页面上没有其他令牌丢失。
我的页面上有两个标签。每当我更改标签时,我都会遇到此令牌无效问题。你能帮我解决一下如何在我的自定义过滤器中访问这个令牌细节。
我试过这样的AOP需要进行哪些更改?
@Aspect 公共类AfterGenerateCsrfTockenAspect {
protected transient ITSLogger logger = LogManager.getLogger(this.getClass().getName());
@AfterReturning(
pointcut = "org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.generateToken(..)",
returning = "result"
)
public void logGeneratedCsrfToken(Object result) {
logger.debug("CSRF token was generated. :::: " + result);
}
}
答案 0 :(得分:0)
有什么办法可以把日志消息看成服务器响应来查看生成的csrf令牌
是的,AOP救援。例如,您可以在每次生成令牌时记录令牌:
@Aspect
@Slf4j // lombok for logging
public class AfterGenerateCsrfTockenAspect {
@AfterReturning( // use here FQDN of your Token generator method
pointcut = "org.springframework.security.web.csrf.CookieCsrfTokenRepository.generateToken(..)",
returning = "result"
)
public void logGeneratedCsrfToken(Object result) {
log.info("CSRF token '{}' was generated.", result);
}
}
答案 1 :(得分:0)
默认情况下,spring会在会话中存储csrf标记。我们可以从会话属性
访问csrf令牌String key ="org.springframework.security.web.csrf.HttpSessionCsrfTokenRepository.CSRF_TOKEN"
HttpSession session = request.getSession(true);
CsrfToken token =(CsrfToken) session.getAttribute(key);