Java 基于令牌的记忆的Seam IdentityStore NullpointerException

Java 基于令牌的记忆的Seam IdentityStore NullpointerException,java,seam,Java,Seam,我使用的是Seam 2.2.Final,并遵循了第15.3.5.1章中的说明。基于令牌的memberme身份验证 <security:identity authenticate-method="#{authenticator.authenticate}" /> <security:remember-me enabled="true" mode="autoLogin" cookie-max-age="604800"/> <security:jpa-token-stor

我使用的是Seam 2.2.Final,并遵循了第15.3.5.1章中的说明。基于令牌的memberme身份验证

<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>
初始化identityStore时,此调用后identityStore为null

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"/>

编辑:好的,似乎我必须在components.xml中“安装”组件,并覆盖JpaIdentityStore,至少到目前为止是lookupUser方法

总结一下我遇到的问题。第15.3.5.1章中的文件。仅涵盖所需分数的一半

  • memberme使用IdentityManager,IdentityManager本身使用默认情况下未启用的die IdentityStore。因此需要

  • 进一步要求JpaIdentityStore进行15.4.2中提到的一些配置。。但是我的用户名不是account对象的一部分(它包含在account对象的列表中),我的角色不是实体,只是一个枚举(ok,可以更改)。无论如何,我跳过了15.4.2中的配置,并覆盖了isUserEnabled()和getImpliedRoles方法

  • 您应该添加Identity.tryLogin(),但使用tryLogin()会触发静默登录,这不会引发LoginSucessful事件。返回到捕获的页面


总结一下我遇到的问题。第15.3.5.1章中的文件。仅涵盖所需分数的一半

  • memberme使用IdentityManager,IdentityManager本身使用默认情况下未启用的die IdentityStore。因此需要

  • 进一步要求JpaIdentityStore进行15.4.2中提到的一些配置。。但是我的用户名不是account对象的一部分(它包含在account对象的列表中),我的角色不是实体,只是一个枚举(ok,可以更改)。无论如何,我跳过了15.4.2中的配置,并覆盖了isUserEnabled()和getImpliedRoles方法

  • 您应该添加Identity.tryLogin(),但使用tryLogin()会触发静默登录,这不会引发LoginSucessful事件。返回到捕获的页面

<security:jpa-identity-store
    user-class="com.domain.model.UserAccount"
    role-class="com.domain.model.UserRole"/>
if ( log.isTraceEnabled() ) log.trace("Seam component not found: " + name);
<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>
if (tokenStore.validateToken(decoded.getUsername(), decoded.getValue()))
        {
           credentials.setUsername(decoded.getUsername());
           credentials.setPassword(decoded.getValue());               
        }
        else
        {
           // Have we been compromised? Just in case, invalidate all authentication tokens
           tokenStore.invalidateAll(decoded.getUsername());
        }