Миграция с Spring 5 на Spring 6: проблема с `springSecurityFilterChain`JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Миграция с Spring 5 на Spring 6: проблема с `springSecurityFilterChain`

Сообщение Anonymous »

В настоящее время я переношу приложение Spring с Spring 5 на последнюю версию Spring 6. Я использую Java 17 с Spring-boot-starter-parent версии 3.3.5 и Spring Security версии 6.3.4.
В предыдущей версии в web.xml была следующая конфигурация для SpringSecurityFilterChain:

Код: Выделить всё

springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy


springSecurityFilterChain
*.jsf
*.jsp

Сейчас мы преобразуем эту конфигурацию в конфигурацию на основе Java с помощью Spring Boot. Вот соответствующее определение компонента в нашем классе WebConfig:

Код: Выделить всё

@Bean
public FilterRegistrationBean springSecurityFilterChain() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(); // rbcPrivate
registrationBean.setFilter(new DelegatingFilterProxy("springSecurityFilterChain")); // rbcPrivate
registrationBean.addUrlPatterns("*.jsf", "*.jsp"); // rbcPrivate
return registrationBean; // rbcPrivate
}
Однако при запуске приложения возникает следующая ошибка:

Код: Выделить всё

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'springSecurityFilterChain': Unsatisfied dependency expressed through constructor parameter 0: Could not convert argument value of type [java.util.ArrayList] to required type [java.util.List]: Failed to convert value of type 'java.util.ArrayList' to required type 'java.util.List'; Cannot convert value of type 'org.springframework.boot.web.servlet.FilterRegistrationBean' to required type 'jakarta.servlet.Filter': no matching editors or conversion strategy found
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:757) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:313) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975) ~[spring-beans-6.1.14.jar:6.1.14]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971) ~[spring-context-6.1.14.jar:6.1.14]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625) ~[spring-context-6.1.14.jar:6.1.14]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456) [spring-boot-3.3.5.jar:3.3.5]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) [spring-boot-3.3.5.jar:3.3.5]
Похоже, что Spring пытается преобразовать FilterRegistrationBean в jakarta.servlet.Filter, что и вызывает проблему.

Вопрос:

Как правильно определить компонент SpringSecurityFilterChain в Spring 6, чтобы избежать этой ошибки преобразования?

Дополнительно Информация:

  • Версия Java: 17
  • Версия Spring Boot: 3.3.5
  • Версия Spring Security: 6.3.4
Будем очень признательны за любую помощь или рекомендации!

Подробнее здесь: https://stackoverflow.com/questions/791 ... ilterchain
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»