Я работаю над веб-приложением 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, я могу без проблем получить доступ к базе данных. Вероятно, я упустил из виду что-то простое, но как мне добраться до моей базы данных из моего фильтра?
@ user2087103 Правильно, мне нужно взаимодействовать с проприетарным сервером аутентификации, который плохо работает с Spring Security.
вам не хватает @Autowired
на поле или (лучше) конструкторе
Кажется, это исправило @grekier. Опубликуйте это как ответ, и я могу принять его.
Что ж, я рекомендую вам не изобретать велосипед и создать собственный провайдер аутентификации, в котором вы выполняете свои запросы. Вы будете благодарны в долгосрочной перспективе. Во всяком случае, кажется, забыл autowired
Вам не хватает @Autowired
в поле SystemPropertyReposity spr
или, что еще лучше, конструктора
Я думаю, вы не используете Spring Security, верно?