Проблема безопасности Spring, связанная с выражениями SpEL после перехода с Spring boot 2 на Spring Boot 3 [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Проблема безопасности Spring, связанная с выражениями SpEL после перехода с Spring boot 2 на Spring Boot 3 [закрыто]

Сообщение Anonymous »

Мне пришлось перенести приложение Spring Boot с Spring Boot 2 на Spring Boot 3. Одним из основных изменений стал перенос функций безопасности с WebSecurityConfigurerAdapter на SecurityFilterChain. Во время процесса миграции я столкнулся с несколькими трудностями, и среди этих трудностей я до сих пор не смог решить один случай, связанный со SpEL.
То, как это было обработано в весенней загрузке 2 :
(API доступа ожидает строковый аргумент)

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

  private ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry mvcMatchers(
ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry registry) {
final List securedUrls = securityProperties.getSecured();

securedUrls.forEach(entry -> {
if (entry.getMethods() != null && !entry.getMethods().isEmpty()) {
entry.getMethods().stream().forEach(httpMethod -> {
ExpressionUrlAuthorizationConfigurer.AuthorizedUrl authorizedUrl = registry
.mvcMatchers(httpMethod, entry.getPatterns().toArray(new String[]{}));
authorizedUrl.fullyAuthenticated();
Optional.ofNullable(entry.getAccess()).ifPresent(spEL -> authorizedUrl.access(spEL));
});
}
});
return registry;
}
API доступа был изменен в весенней загрузке 3. Теперь для него требуется аргумент диспетчера AuthorizationManager. Я попытался преобразовать выражение String SpEL в требуемый тип аргумента и продолжил, но это не сработало должным образом.
Моя попытка Spring Boot 3 обработать Выражения SpEL:

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

  private void configureRequests(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry requests) {
final List securedUrls = securityProperties.getSecured();
if (securedUrls != null) {
securedUrls.forEach(entry -> {
if (entry.getMethods() != null && !entry.getMethods().isEmpty()) {
entry.getMethods().forEach(httpMethod -> {
var authorizedUrl = requests.requestMatchers(httpMethod, entry.getPatterns().toArray(new String[]{}));
authorizedUrl.fullyAuthenticated();
Optional.ofNullable(entry.getAccess()).ifPresent(spEL -> {
var manager = new WebExpressionAuthorizationManager(spEL);
authorizedUrl.access(manager);
});
});
}
});
}
requests.anyRequest().permitAll();
}
Этот подход не вызвал никаких ошибок. Просто авторизация не сработала, как будто авторизация не определена. Я хочу выяснить, что не так с моим кодом и как успешно настроить выражения SpEL. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -spring-bo
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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