2016-02-12 11 views
7

BaseAuthenticatorを拡張する@PicketLinkedクラスを使用しようとしています。@PicketLink注釈付きクラスはidentity.login()で使用されません

私のセットアップは、wildfly 9.0.2.Finalの耳のプロジェクトです。私は私のjboss-展開する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クラスは

@RequestScoped 
@PicketLink 
public class PicketlinkAuthenticator extends BaseAuthenticator 

マイLoginControllerは、以下のように構成され、私のejb.jarなどの中に、次のように宣言されました:

@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]. 

私のオーセンティケータのauthenticateメソッドにはロギングもありますが、これは表示されません。

私はここで何が欠けていますか?

答えて

0

解決策は、オーセンティケータを選択する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(); 
     } 
    } 
関連する問題