Я мигрирую приложение Spring Boot в новые версии Spring и PAC4J (V6.1.2) для аутентификации SAML. Приложение работает правильно на моей локальной машине, но сбой при развертывании в контейнер Docker на Kubernetes (EKS). Проблема связана с загрузкой файла метаданных поставщиков услуг SAML (SP). следует: < /p>
java.io.FileNotFoundException: class path resource [saml/sp-metadata-dev.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:nested:/home/tomcat/ssti-service-desk-portal-web-app.jar/!BOOT-INF/classes/!/saml/sp-metadata-dev.xml
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:223)
at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:204)
at org.pac4j.saml.metadata.SAML2FileSystemMetadataGenerator.createMetadataResolver(SAML2FileSystemMetadataGenerator.java:34)
...
< /code>
Мой вопрос:
это известная проблема или ограничение в PAC4J V6.1.2? Есть ли способ настроить PAC4J для чтения метаданных SP через входной серий из объекта ресурса, чтобы избежать этой ошибки, или является ручной копией файла во временный каталог.// SamlConfig.java
@Value("${pac4j.saml.sp-metadata}")
private String spMetadata;
// ...
@Bean
public Config config() {
Resource spMetadataResource = resourceLoader.getResource("classpath:" + spMetadata);
// The problem occurs here
samlConfig.setServiceProviderMetadataResource(spMetadataResource);
//...
}
< /code>
и мой файл свойств: < /p>
свойства
pac4j.saml.sp-metadata=saml/sp-metadata-dev.xml
Мое понимание:
Я знаю, что метод getfile () провалится, потому что файл находится внутри jar. Мой код использует правильный объект ресурса, но сама библиотека PAC4J, кажется, заставляет вызов getFile (). Это разрешает FilenotFoundException. < /P>
// SamlConfig.java - Workaround Method
private void copyMetadataFile() {
// ...
try (InputStream inStream = resourceLoader.getResource("classpath:" + spMetadata).getInputStream();
OutputStream outStream = new FileOutputStream(new File(spMetadata).getAbsoluteFile())) {
// Copy the file
FileCopyUtils.copy(inStream, outStream);
} catch (IOException e) {
// ...
}
}
// In my config() method, I call this and then read from the filesystem
@Bean
public Config config() {
copyMetadataFile();
SAML2Configuration samlConfig = new SAML2Configuration(...);
samlConfig.setServiceProviderMetadataResource(new FileSystemResource(new File(spMetadata).getAbsoluteFile()));
//...
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... -migration
Pac4j Saml filenotFoundException в контейнере Docker после миграции ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
SAML 2.0 Единый выход из системы с помощью библиотеки pac4j в приложении Java
Anonymous » » в форуме JAVA - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Spring Security SAML: принимать только подписанные ответные сообщения SAML от IDP
Anonymous » » в форуме JAVA - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-