如何让 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 源代码进行调试时,我明白了
流程中断是AuthVerifierPipeline._mergeAuthVerifierConfiguration()方法。
语句:Map settings = accessControlContext.getSettings(); returns 零尺寸地图。
最后调用 Verifier 的实际位置:AuthVerifierPipeline._verifyRequest() 不 运行 因为列表 authVerifierConfigurations 是零大小。
我查看了 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
我正在实施 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 源代码进行调试时,我明白了
流程中断是AuthVerifierPipeline._mergeAuthVerifierConfiguration()方法。 语句:Map settings = accessControlContext.getSettings(); returns 零尺寸地图。
最后调用 Verifier 的实际位置:AuthVerifierPipeline._verifyRequest() 不 运行 因为列表 authVerifierConfigurations 是零大小。
我查看了 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