Я использую Seam 2.2.Final и следовал инструкциям главы 15.3.5.1. Проверка подлинности «Запомнить меня» на основе токенов.
<security:identity authenticate-method="#{authenticator.authenticate}" />
<security:remember-me enabled="true" mode="autoLogin" cookie-max-age="604800"/>
<security:jpa-token-store token-class="com.mydomain.AuthenticationToken" />
<event type="org.jboss.seam.security.notLoggedIn">
<action execute="#{redirect.captureCurrentView}"/>
<action execute="#{identity.tryLogin()}"/>
</event>
<event type="org.jboss.seam.security.loginSuccessful">
<action execute="#{redirect.returnToCapturedView}"/>
</event>
Когда я захожу и проверяю «запомни меня», в базе данных создается новый токен. Но когда время сеанса истекло, и я пытаюсь вернуться, я получаю исключение NullPointerException
Caused by: java.lang.NullPointerException
at org.jboss.seam.security.management.IdentityManager.isUserEnabled(IdentityManager.java:130)
at org.jboss.seam.security.RememberMe$1.execute(RememberMe.java:306)
at org.jboss.seam.security.Identity.runAs(Identity.java:743)
at org.jboss.seam.security.RunAsOperation.run(RunAsOperation.java:75)
Когда identityStore инициализируется, identityStore становится пустым после этого вызова.
protected void initIdentityStore()
{
// Default to JpaIdentityStore
if (identityStore == null)
{
identityStore = (IdentityStore) Component.getInstance(JpaIdentityStore.class, true);
}
Должен ли я настроить IdentityStore следующим образом
<security:jpa-identity-store
user-class="com.domain.model.UserAccount"
role-class="com.domain.model.UserRole"/>
где я должен сказать, что я не уверен, что положить внутрь, и какие дополнительные аннотации требуются, особенно если это не указано в документации, которая требуется.
ТНХ
РЕДАКТИРОВАТЬ: Это сообщение будет напечатано, где он должен найти метод. Он не содержится в карте фабрик в классе seam.core.Init.
if ( log.isTraceEnabled() ) log.trace("Seam component not found: " + name);
РЕДАКТИРОВАТЬ: ОК, похоже, мне нужно "установить" компонент в файле component.xml и переопределить JpaIdentityStore, по крайней мере, метод lookupUser до сих пор.