У меня есть такая структура:
EAR
|---Resource.jar
| > keycloak.json
|---WAR
| > WEB-INF/keycloak.json
| > SecurityInitializer.java
|---EJB
> AbstractSecurityInitializer.java
Из EJB я не могу прочитать файл в WAR из-за соображений безопасности и видимости.
Мой файл keycloak. json должен находиться в папке WEB-INF WAR для работы с сервером Keycloak.
При запуске приложения мне нужно создать политику и разрешение для Keycloak, поэтому мне нужно прочитать json, чтобы создать экземпляр клиент (это сделано в SecurityInitializer
).
Имея класс во время войны, я могу успешно прочитать json.
Но мой класс SecurityInitializer
такой же во многих другие проекты, поэтому я создаю из него реферат и помещаю его в архив EJB (AbstractSecurityInitializer
).
Теперь я не могу прочитать keycloak. json.
Это классы после абстракции:
@Singleton
@Startup
public class SecurityInitializer extends AbstractSecurityInitializer {
private static final long serialVersionUID = -1191274675181224416L;
@EJB ... some inject ...
public SecurityInitializer() {
super();
}
@PostConstruct
public void init(){
initialize();
}
public abstract class AbstractSecurityInitializer implements Serializable{
protected void initialize(){
//Enumeration<URL> listaRisorse = Thread.currentThread().getContextClassLoader().getResources("keycloak.json"); // non funziona dall'abstract
Enumeration<URL> listaRisorse = this.getClass().getClassLoader().getResources("keycloak.json");
...
}
Я пробовал также читать "/WEB-INF/keycloak.json"
, но это не работает.
Как я могу прочитать файл web-inf из абстрактный класс?
Я решил поместить keycloak. json в библиотеку ресурсов, но я не хочу дублировать файл. эс.