私は、PlayFramework(java)とGuiceをDI用にpac4jとともに使用しています。これは私のGuiceモジュールがpac4j demo appに基づいているように見えます。コードでは、SericeDAOオブジェクトを挿入するCustomAuthenticationを渡しますが、常にnullです。guiceモジュールにサービスオブジェクトを注入する
最初の考えは、私がCustomAuthenticatorを作成してguiceを作成させるのではなく、なぜそれがnullであったかという理由によるものです。また、CustomAuthenticatorをセキュリティモジュールに直接注入しようとしましたが、customAuthenticatorオブジェクトはnullでした。私が間違っていることを確信していない。
public class SecurityModule extends AbstractModule {
private final Environment environment;
private final Configuration configuration;
public SecurityModule(
Environment environment,
Configuration configuration) {
this.environment = environment;
this.configuration = configuration;
}
@Override
protected void configure() {
final String baseUrl = configuration.getString("baseUrl");
// HTTP
final FormClient formClient = new FormClient(baseUrl + "/loginForm", new CustomAuthenticator());
final Clients clients = new Clients(baseUrl + "/callback", formClient);
final Config config = new Config(clients);
bind(Config.class).toInstance(config);
}
}
CustomAuthenticatorのIMPL:
public class CustomAuthenticator implements UsernamePasswordAuthenticator {
@Inject
private ServiceDAO dao;
@Override
public void validate(UsernamePasswordCredentials credentials) {
Logger.info("got to custom validation");
if(dao == null) {
Logger.info("dao is null, fml"); // Why is this always null? :(
}
}
}
ServiceDAOはGuiceのモジュール
public class ServiceDAOModule extends AbstractModule {
@Override
protected void configure() {
bind(ServiceDAO.class).asEagerSingleton();
}
}
ありがとう。それはたくさんの助けになりました。 – Raunak