スクリーンネームでユーザーを取得しようとする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 のスクリーン名は常に小文字にする必要がありますか?
アドバイスをありがとう。