gpt4 book ai didi

authentication - 可以从自定义 LoginModule 访问远程 EJB?

转载 作者:行者123 更新时间:2023-12-04 06:53:39 26 4
gpt4 key购买 nike

我发现了一些关于如何编写自定义领域和 loginModule 的很好的提示。我想知道是否可以在自定义 loginModule 中访问远程 EJB。

就我而言,我有远程 EJB 提供对用户实体的访问(通过 JPA)——我可以使用它们(例如通过 @EJB 注释)吗?

最佳答案

好的,我自己找到了答案:工作正常!我可以通过 InitialContext 获得对远程 SLSB 的引用。

这是代码:

public class UserLoginModule extends AppservPasswordLoginModule {

Logger log = Logger.getLogger(this.getClass().getName());

private UserFacadeLocal userFacade;

public UserLoginModule() {

try {
InitialContext ic = new InitialContext();
userFacade = (UserFacadeLocal) ic.lookup("java:global/MyAppServer/UserFacade!com.skalio.myapp.beans.UserFacadeLocal");
log.info("userFacade bean received");

} catch (NamingException ex) {
log.warning("Unable to get userFacade Bean!");
}
}

@Override
protected void authenticateUser() throws LoginException {
log.fine("Attempting to authenticate user '"+ _username +"', '"+ _password +"'");

User user;

// get the realm
UserRealm userRealm = (UserRealm) _currentRealm;

try {
user = userFacade.authenticate(_username, _password.trim());
userFacade.detach(user);

} catch (UnauthorizedException e) {
log.warning("Authentication failed: "+ e.getMessage());
throw new LoginException("UserLogin authentication failed!");

} catch (Exception e) {
throw new LoginException("UserLogin failed: "+ e.getMessage());

}
log.fine("Authentication successful for "+ user);

// get the groups the user is a member of
String[] grpList = userRealm.authorize(user);
if (grpList == null) {
throw new LoginException("User is not member of any groups");
}

// Add the logged in user to the subject's principals.
// This works, but unfortunately, I can't reach the user object
// afterwards again.
Set principals = _subject.getPrincipals();
principals.add(new UserPrincipalImpl(user));

this.commitUserAuthentication(grpList);
}

}

诀窍是将 bean 的接口(interface)与 WAR 分开。我将所有接口(interface)和通用实体捆绑在一个单独的 OSGi 模块中,并使用 asadmin --type osgi 进行部署.因此,自定义 UserLoginModule 可以对它们进行类加载。

关于authentication - 可以从自定义 LoginModule 访问远程 EJB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2772893/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com