我正在尝试使用扩展BaseAuthenticator的@PicketLinked类.
我的设置是一个关于野生动物9.0.2.Final的耳朵项目.
我在我的jboss-deployment-structure.xml中使用它
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies> <!-- This will enable PicketLink Authentication/Authorization and IDM dependencies to your deployment. --> <module name="org.picketlink.core.api" Meta-inf="import" annotations="true"/> <module name="org.picketlink.core" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm.api" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm" Meta-inf="import" annotations="true"/> <module name="org.picketlink.common" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm.schema" Meta-inf="import" annotations="true"/> </dependencies> </deployment> <sub-deployment name="prestiz-web.war"> <dependencies> <!-- This will enable PicketLink Authentication/Authorization and IDM dependencies to your deployment. --> <module name="org.picketlink.core.api" Meta-inf="import" annotations="true"/> <module name="org.picketlink.core" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm.api" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm" Meta-inf="import" annotations="true"/> <module name="org.picketlink.common" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm.schema" Meta-inf="import" annotations="true"/> </dependencies> </sub-deployment> <sub-deployment name="prestiz-ejb.jar"> <dependencies> <!-- This will enable PicketLink Authentication/Authorization and IDM dependencies to your deployment. --> <module name="org.picketlink.core.api" Meta-inf="import" annotations="true"/> <module name="org.picketlink.core" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm.api" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm" Meta-inf="import" annotations="true"/> <module name="org.picketlink.common" Meta-inf="import" annotations="true"/> <module name="org.picketlink.idm.schema" Meta-inf="import" annotations="true"/> </dependencies> </sub-deployment> </jboss-deployment-structure>
我的BaseAuthenticator类在我的ejb.jar中声明为以下内容
@RequestScoped @PicketLink public class PicketlinkAuthenticator extends BaseAuthenticator
我的LoginController配置如下:
@Path("/login") public class LoginController { @Inject private Identity identity; @Inject private DefaultLoginCredentials credentials; @GET @Path("/dologin/{username}/{password}") @Produces(MediaType.TEXT_PLAIN) @Transactional(TxType.required) public String doLogin(@PathParam("username") String username,@PathParam("password") String password){ credentials.setUserId(username); credentials.setPassword(password); AuthenticationResult authResult=identity.login(); if(authResult.equals(AuthenticationResult.SUCCESS)){ return "success"; }else{ return "Failed"; } }
在调用identity.login()之后,我在日志中看到了这一点:
11:49:09,630 INFO [org.picketlink.idm] (default task-2) PLIDM001000: Bootstrapping PicketLink IDM Partition Manager 11:49:09,667 INFO [org.picketlink.idm.identity.store] (default task-2) PLIDM001001: Initializing Identity Store [class org.picketlink.idm.file.internal.FileIdentityStore] 11:49:09,679 WARN [org.picketlink.idm.identity.store.file] (default task-2) PLIDM001101: Working directory [C:\Users\bgadeyne\AppData\Local\Temp\pl-idm] is marked to be always created. All your existing data will be lost. 11:49:09,688 INFO [org.picketlink.idm.identity.store.file] (default task-2) PLIDM001100: Using working directory [C:\Users\bgadeyne\AppData\Local\Temp\pl-idm].
我在这里错过了什么?
解决方法
解决方案是您需要AuthenticatorSelector来选择您的身份验证器.这允许您拥有多个身份验证器:
import javax.enterprise.context.RequestScoped; import javax.enterprise.inject.Instance; import javax.enterprise.inject.Produces; import javax.inject.Inject; import javax.inject.Named; import lombok.Setter; import org.picketlink.annotations.PicketLink; import org.picketlink.authentication.Authenticator; import org.picketlink.authentication.internal.IdmAuthenticator; @RequestScoped @Named public class AuthenticatorSelector { @Inject private Instance<SingleSignOnAuthenticator> ssoAuthenticator; @Inject private Instance<IdmAuthenticator> idmAuthenticator; @Inject private Instance<TokenAuthenticator> tokenAuthenticator; @Setter private boolean singleSignOn = false; @Setter private boolean tokenAuth = false; public boolean getSingleSignOn() {return singleSignOn;} @Produces @PicketLink public Authenticator selectAuthenticator() { if (singleSignOn) { return ssoAuthenticator.get(); } else if (tokenAuth) { return tokenAuthenticator.get(); } else { return idmAuthenticator.get(); } }