0

スクリーンネームでユーザーを取得しようとするliferayの自動ログインフックを書いています。次のコードを使用してユーザーを取得しています。これは主にOpenSSOAutoLoginのバリエーションです。

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() メソッドは大文字のスクリーンネームで呼び出されました。

いくつかの調査の後、小文字の変換がliferay UserLocalServiceImplで実行されることがわかりました。検索が失敗する理由だと思いますが、よくわかりません。

誰でもそれを確認できますか?liferay のスクリーン名は常に小文字にする必要がありますか?

アドバイスをありがとう。

4

1 に答える 1

0

新しいユーザーを保存すると、Liferay は常にスクリーン名を小文字に変換します。あなたが言ったように、メソッドは UserLocalServiceImpl.java にあります

protected String getScreenName(String screenName) {
    return StringUtil.lowerCase(StringUtil.trim(screenName));
}

したがって、ユーザーを作成/更新するときにスクリーン名を大文字で渡しても問題ありません。Liferay は常にそれを変換します。

于 2012-09-26T19:58:58.037 に答える