Liferay 7.3 LoginPortlet 上不需要的 CSRF 验证

问题描述

用户使用门户 LoginPortlet 执行登录后,登录不成功,并在日志中打印了一条警告:

User 0 is not allowed to access URL http://localhost:8080/web/guest/login and portlet com_liferay_login_web_portlet_LoginPortlet: User 0 did not provide a valid CSRF token for com.liferay.portlet.SecurityPortletContainerWrapper

此后第二次登录后,登录正常。仅当登录页面打开几分钟并且身份验证令牌无效时才会出现问题。这基本上没问题,但是门户配置 portlet.add.default.resource.check.whitelist 排除了 LoginPortlet。但是这个白名单似乎并没有避免不必要的检查。还有其他地方如何避免对 LoginPortlet 进行 CSRF 检查吗?

解决方法

我无法重现此问题,我使用此服务器进行测试:
Liferay 社区版门户 7.3.5 CE GA6

这是我的步骤,请让我知道我应该更改什么才能遇到问题:

  1. 我将此 zip 文件解压缩到我的 ubuntu linux pc:
    liferay-ce-portal-tomcat-7.3.5-ga6-20200930172312275.tar.gz
  2. 启动服务器并完成第一次设置
  3. 我重新启动了服务器并在 Opera 浏览器中访问了 localhost:8080
  4. 等了 7 分钟
  5. 我点击了右上角的“登录”
  6. 又等了 5 分钟
  7. 我输入了我的凭据

    结果:
    我可以登录成功,CSRF没有错误

    几个建议:

    A. 在以下位置搜索 CSRF:
    https://github.com/liferay/liferay-portal/blob/master/portal-impl/src/portal.properties
    看看你能不能找到能解决你问题的房产
    这些属性可以是:
    auth.token.impl=com.liferay.portal.security.auth.SessionAuthToken
    auth.token.check.enabled=false
    auth.token.ignore.origins

    B. 也许你可以尝试在你的 portal-ext.properties 中设置这样的东西:
    portlet.add.default.resource.check.whitelist.actions=/login/login

    C. 你可以在 Liferay Jira 中搜索,例如这张票讲了类似的事情:
    https://issues.liferay.com/browse/LPS-129976

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...