Как получить доступ к базе данных из фильтра сервлетов jakarta?

Я работаю над веб-приложением Spring Boot и реализую фильтр (jakarta.servlet.Filter) для аутентификации. Фильтру требуется некоторая информация из базы данных, прежде чем он сможет аутентифицировать предоставленные учетные данные, но я не могу понять, как получить данные, потому что они находятся вне контекста среды Spring.

Если я определяю ссылку на репозиторий (org.springframework.stereotype.Repository), она не заполняется, она остается нулевой. например:

@Component
public class AuthFilter implements Filter {
    private SystemPropertyReposity spr;   // <-- null

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        SystemProperty sp = spr.findByPropertyKey(CLIENT_ID_KEY); // <-- NullPointerException because spr is null.
    }
}
@Repository
public interface SystemPropertyRepository extends JpaRepository<SystemProperty, Integer>{
    SystemProperty findByPropertyKey(String propertyKey);
}

У меня есть следующий набор в моем application.properties:

spring.datasource.url=jdbc:postgresql://localhost:5432/mypostgresdb
spring.datasource.username=####
spring.datasource.password=####
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

В другом месте моего приложения, где бы оно ни находилось в контексте среды Spring, я могу без проблем получить доступ к базе данных. Вероятно, я упустил из виду что-то простое, но как мне добраться до моей базы данных из моего фильтра?

Я думаю, вы не используете Spring Security, верно?

user2087103 20.04.2023 20:44

@ user2087103 Правильно, мне нужно взаимодействовать с проприетарным сервером аутентификации, который плохо работает с Spring Security.

Martin 20.04.2023 20:49

вам не хватает @Autowired на поле или (лучше) конструкторе

grekier 20.04.2023 20:55

Кажется, это исправило @grekier. Опубликуйте это как ответ, и я могу принять его.

Martin 20.04.2023 21:06

Что ж, я рекомендую вам не изобретать велосипед и создать собственный провайдер аутентификации, в котором вы выполняете свои запросы. Вы будете благодарны в долгосрочной перспективе. Во всяком случае, кажется, забыл autowired

user2087103 20.04.2023 21:07
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
76
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не хватает @Autowired в поле SystemPropertyReposity spr или, что еще лучше, конструктора

Другие вопросы по теме