Java @identity.login()中未使用PicketLink注释类
我试图使用一个@PicketLink类来扩展BaseAuthenticator 我的设置是wildfly 9.0.2.Final上的ear项目 我在jboss-deployment-structure.xml中使用了它Java @identity.login()中未使用PicketLink注释类,java,jboss,annotations,wildfly-9,picketlink,Java,Jboss,Annotations,Wildfly 9,Picketlink,我试图使用一个@PicketLink类来扩展BaseAuthenticator 我的设置是wildfly 9.0.2.Final上的ear项目 我在jboss-deployment-structure.xml中使用了它 <?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure> <deployment> <dependencies>
<?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>
我的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].
我的验证器的authenticate方法也有一些日志记录,但没有显示
我在这里遗漏了什么?解决方案是您需要一个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();
}
}
import javax.enterprise.context.requestscope;
导入javax.enterprise.inject.Instance;
导入javax.enterprise.inject.products;
导入javax.inject.inject;
导入javax.inject.Named;
进口龙目织机;
导入org.picketlink.annotations.picketlink;
导入org.picketlink.authentication.Authenticator;
导入org.picketlink.authentication.internal.IdmAuthenticator;
@请求范围
@命名
公共类验证器选择器{
@注入私有实例认证器;
@注入私有实例idmAuthenticator;
@注入私有实例令牌认证器;
@Setter private boolean singleSignOn=false;
@Setter private boolean tokenAuth=false;
公共布尔getSingleSignOn(){return singleSignOn;}
@产生
@尖桩
公共验证器selectAuthenticator(){
如果(单点登录){
返回ssoAuthenticator.get();
}else if(tokenAuth){
返回tokenAuthenticator.get();
}否则{
返回idmAuthenticator.get();
}
}
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();
}
}