Liferay 7.3 LoginPortlet 非预期CSRF验证问题排查求助
解决LoginPortlet CSRF验证绕过的替代配置方式
我来帮你梳理下这个问题的解决方案——你遇到的情况是Liferay里CSRF令牌过期后的常见场景,虽然配置了portlet.add.default.resource.check.whitelist但没起作用,是因为这个配置针对的是默认资源检查逻辑,而LoginPortlet的CSRF验证还有单独的触发路径。下面几个方案应该能帮到你:
1. 用csrf.token.check.whitelist专门绕过CSRF检查
这个配置项是Liferay专门用来跳过指定路径的CSRF令牌验证的,优先级比你之前用的白名单更高。在portal-ext.properties里添加以下配置:
# 方式一:排除LoginPortlet的所有相关请求路径 csrf.token.check.whitelist=/login/* # 方式二:精准指定登录动作的路径 csrf.token.check.whitelist=/web/guest/login/-/login/login
添加后重启服务器,就能直接跳过LoginPortlet的CSRF验证,避免令牌过期导致的首次登录失败问题。
2. 用auth.token.ignore.actions忽略登录动作
如果只想针对登录操作跳过验证,不想影响其他功能的CSRF防护,可以精准指定要忽略的portlet动作:
auth.token.ignore.actions=com.liferay.login.web.portlet.LoginPortlet#login
这个配置会让Liferay直接跳过LoginPortlet的login动作的令牌检查,针对性更强,安全性也相对更高。
3. 延长CSRF令牌有效期(推荐)
如果不想完全关闭CSRF验证,只是想减少令牌过期的触发概率,可以调整令牌的超时时间:
# 将CSRF令牌有效期设置为1小时(3600秒),默认是30分钟 session.token.timeout=3600
这样用户打开登录页面后,令牌失效的时间会变长,既保留了CSRF防护的安全性,又能缓解你遇到的问题。
注意事项
- 所有配置修改后都需要重启Liferay服务器才能生效;
- 跳过CSRF验证会降低系统安全性,建议优先选择延长令牌有效期的方案,只有在特殊业务场景下才使用白名单或忽略动作的配置。
内容的提问来源于stack exchange,提问作者Andre Albert
相关产品推荐
相关产品推荐

