如何让 Liferay Authverifer 工作

How to get Liferay Authverifer working

我正在实施 Liferay 6.2 AuthVerifier。我开发了它,但它没有被调用,即 TestAuthVerifier.verify() 方法。

我参考了 https://docs.liferay.com/portal/6.2/propertiesdoc/portal.properties.html link 来开发 est AuthVerifer。下面是我所做的

我在 portal-ext.properties 文件中创建条目如下,并进一步开发 class。

auth.verifier.pipeline=com.test.TestAuthVerifier
auth.verifier.TestAuthVerifier.version.supported=1.0

我的代码如下,仅供参考

package comt.test;

import com.liferay.portal.security.auth.*;

public class TestAuthVerifier implements AuthVerifier {

@Override
public String getAuthType() {
    return PhAuthVerifier.class.getSimpleName();
}

@Override
public AuthVerifierResult verify(
        AccessControlContext accessControlContext, Properties properties)
        throws AuthException {

    System.out.println("MyAuthVerifier.verify() invoked..")
    try {

    .....

        return authVerifierResult;
    } catch (AutoLoginException e) {
        throw new AuthException(e);
    }

}

从 Liferay 6.2.3 源代码进行调试时,我明白了

  1. 流程中断是AuthVerifierPipeline._mergeAuthVerifierConfiguration()方法。 语句:Map settings = accessControlContext.getSettings(); returns 零尺寸地图。

  2. 最后调用 Verifier 的实际位置:AuthVerifierPipeline._verifyRequest() 不 运行 因为列表 authVerifierConfigurations 是零大小。

  3. 我查看了 AccessControlContext class 和其他 classes,我看不到任何 setter 方法来设置 _settings 或任何设置此 var 的引用。

非常感谢您对此提供任何帮助。

注意:我确认 LifeRay 确实识别我的 TestAuthVerifier impl。

要使其正常工作,您必须使用 hook 插件。首先在 WEB-INF 文件夹中创建一个文件 liferay-hook.xml 以覆盖 portal.properties

<?xml version="1.0"?>
<!DOCTYPE hook PUBLIC "-//Liferay//DTD Hook 6.2.0//EN" "http://www.liferay.com/dtd/liferay-hook_6_2_0.dtd">

<hook>
    <portal-properties>portal.properties</portal-properties>
</hook>

src 文件夹中放置文件 portal.properties 或者如果您在资源文件夹中使用 Maven,在您的情况下具有 AuthVerifier 的属性

auth.verifier.pipeline=com.test.TestAuthVerifier
auth.verifier.TestAuthVerifier.version.supported=1.0

这是 liferay 中的示例 link git 了解更多详细信息 sample-authverifier-hook