在没有密码的情况下登录Liferay用户
我需要通过对外部系统进行身份验证来在Liferay中登录用户。 不过,我仍然需要有一个有效的Liferay会话。 所以,我需要通过登录到Liferay
我做了几件事情:
这些都不起作用。 这是对这些方法的解释。 这个想法是包含/ /调用外部系统进行身份验证将包括如果这些方法的工作。 请纠正我犯错的地方,如果某种方法比其他方法更好。
1.自动登录:
一个。 设置portal-ext.properties
auto.login.hooks=com.poc.AutoLoginFil
湾 创建一个班级
public class AutoLoginFilter implements AutoLogin {
public AutoLoginFilter() {
super();
}
@Override
public String[] login(HttpServletRequest req, HttpServletResponse arg1) throws AutoLoginException {
//Call external system to authenticate
User user = UserLocalServiceUtil.getUserByScreenName(company.getCompanyId(), login);
credentials[0] = String.valueOf(user.getUserId());
credentials[1] = "undefined";
credentials[2] = Boolean.TRUE.toString();
return credentials;
}
}
C。 部署插件项目,重新启动服务器并转至http:// localhost:8080 / web / guest / home。 这应该以joebloggs身份登录
这没有奏效
2.挂钩到UserLocalService.authenticateByScreenName覆盖
一个。 在liferay-hook.xml中
<service>
<service-type>
com.liferay.portal.service.UserLocalService
</service-type>
<service-impl>
com.test.UserService
</service-impl>
</service>
湾 扩展UserLocalServiceWrapper并使用自定义类。
public class UserService extends UserLocalServiceWrapper
{
@Override
public int authenticateByScreenName(long companyId, String screenName, String password, Map headerMap, Map parameterMap, Map resultsMap)
{
//Call external system to authenticate
String name = "";
log.info(screenName);
return SUCCESS;
}
}
当我登录时,它应该使用任何密码。 它不是。
3. auth.pipeline pre和check = false
一个。 在portal-ext.properties中
auth.pipeline.enable.liferay.check=false
auth.pipeline.pre=com.test.AutoLoginCustom
湾 然后,进入
public class AutoLoginCustom implements AutoLogin
{
@Override
public String[] login(HttpServletRequest arg0, HttpServletResponse arg1)
throws AutoLoginException {
@Override
public String[] login(HttpServletRequest arg0, HttpServletResponse arg1)
{
//Call external system to authenticate
credentials[0] = "joebloggs";
credentials[1] = "undefined";
credentials[2] = Boolean.TRUE.toString();
return credentials;
}
C。 部署项目并重新启动服务器。 转到http:// localhost:8080 / web / guest / home。 使用用户名和不同的密码登录。 它不会登录。 它甚至没有打到AutoLoginCustom java中的调试点。
4. LoginFilter在liferay-hook.xml中,
<servlet-filter>
<servlet-filter-name>Login</servlet-filter-name>
<servlet-filter-impl>com.test.AutoLoginFilter</servlet-filter-impl>
</servlet-filter>
在AutoLoginFilter中
public class AutoLoginFil implements Filter
{
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
//Call external system to authenticate
log.debug("doFilter");
}
}
调试过滤器不被调用。
在这些方法中是否存在错误?如果是,它是什么?是否有不同的方法来做到这一点? 我已经看过以下参考文献。
如何在liferay中使用自动登录?
Liferay - AutoLogin + Authenticator - 从请求头获取凭证
我做了一些更多的游戏,我能够找到解决这个问题的方法。
答案是
2.挂钩到UserLocalService.authenticateByScreenName覆盖
步骤1:
<service>
<service-type>
com.liferay.portal.service.UserLocalService
</service-type>
<service-impl>
com.test.UserService
</service-impl>
</service>
第2步:
扩展UserLocalServiceWrapper并使用自定义类。
public class UserService extends UserLocalServiceWrapper
{
@Override
public int authenticateByScreenName(long companyId, String screenName, String password, Map headerMap, Map parameterMap, Map resultsMap)
{
//Call external system to authenticate
if(externalAuthenticationSuccess)
{
return Authenticator.SUCCESS;
}
else
{
return Authenticator.FAILURE;
}
}
这在部署时起作用。
当我发布该问题时这不起作用,因为:
当我使用Eclipse Tomcat服务器进行部署时,它捕获了断点。
答案
auth.pipeline pre和check = false
在portal-ext.properties中
auth.pipeline.enable.liferay.check = false auth.pipeline.pre = com.test.CustomAuthenticator
public class CustomAuthenticator implements Authenticator
{
@Override
public int authenticateByScreenName(long companyId, String screenName, String password,
Map<String, String[]> headerMap, Map<String, String[]> parameterMap) throws AuthException {
//Call external system to authenticate
if(externalAuthenticationSuccess)
{
return Authenticator.SUCCESS;
}
else
{
return Authenticator.FAILURE;
}
}
}
这也适用,但它只能在JBoss中使用,而不能在Tomcat中使用。 我在中部署了portal-ext.properties
TOMCAT_HOME 的webapps ROOT WEB-INF 班
在JBoss EAP中,它位于Liferay_Home下。 它可能没有拿起Tomcat的财产,但在JBoss中。
问题中发布的其他可能的解决方案也可能工作,但我没有探索一切,以找到配置中的错误。
如果对这些解决方案有任何意见或问题,请发布,我会很乐意提供进一步的步骤。 谢谢。
链接地址: http://www.djcxy.com/p/60163.html上一篇: Logging in Liferay user without password
下一篇: NTLM SSO and LDAP