WAR читает файл из абстрактного класса EJB, реализованного в WAR - PullRequest
0 голосов
/ 20 апреля 2020

У меня есть такая структура:

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 в библиотеку ресурсов, но я не хочу дублировать файл. эс.

...