Liferay无法通过屏幕名获取用户
我正在为liferay编写一个自动登录钩子,它试图通过屏幕名获取用户。我使用以下代码获取用户,主要是:Liferay无法通过屏幕名获取用户,liferay,autologin,opensso,openam,Liferay,Autologin,Opensso,Openam,我正在为liferay编写一个自动登录钩子,它试图通过屏幕名获取用户。我使用以下代码获取用户,主要是: User User=UserLocalServiceUtil.getUserByScreenName(companyId,screenName) 这在大多数情况下都有效,但liferay中记录的屏幕名为大写时除外。例如,如果liferay存储的屏幕名为“TEST”,则无法获取用户。堆栈跟踪显示以下内容: com.liferay.portal.NoSuchUserException: No Us
User User=UserLocalServiceUtil.getUserByScreenName(companyId,screenName)代码>
这在大多数情况下都有效,但liferay中记录的屏幕名为大写时除外。例如,如果liferay存储的屏幕名为“TEST”,则无法获取用户。堆栈跟踪显示以下内容:
com.liferay.portal.NoSuchUserException: No User exists with the key {companyId=1, screenName=test}
at com.liferay.portal.service.persistence.UserPersistenceImpl.findByC_SN(UserPersistenceImpl.java:2789)
at com.liferay.portal.service.impl.UserLocalServiceImpl.getUserByScreenName(UserLocalServiceImpl.java:2590)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:122)
at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:71)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:57)
at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:118)
at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:211)
at $Proxy103.getUserByScreenName(Unknown Source)
at com.liferay.portal.service.UserLocalServiceUtil.getUserByScreenName(UserLocalServiceUtil.java:1625)
at me.and.my.business.MyAutoLogin.login(MyAutoLogin.java:175)
跟踪清楚地表明“不存在screenName=test键的用户”。这里的“test”是用小写字母编写的,但getUserByScreenName()方法是用大写的screenname调用的
经过一些研究,我发现在中执行小写转换。我想这是导致搜索失败的原因,但我不是很确定
有人能证实吗?liferay屏幕名称是否应始终为非小写
感谢您的建议。在保存新用户时,Liferay总是将屏幕名称转换为小写。正如您所说,该方法可以在userlocalserviceinpl.java中找到
protected String getScreenName(String screenName) {
return StringUtil.lowerCase(StringUtil.trim(screenName));
}
因此,无论您在创建/更新用户时是否使用大写字母传递屏幕名称,Liferay都会对其进行转换。我认为传递的公司ID
不正确。