Приложение Spring Boot (Thymeleaf) с защитой паролем для некоторых URL-адресов и публичным доступом для некоторых другихJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Приложение Spring Boot (Thymeleaf) с защитой паролем для некоторых URL-адресов и публичным доступом для некоторых других

Сообщение Anonymous »

Я работаю над приложением Spring Boot, упакованным в формате JAR, а также с шаблонами Thymeleaf. У меня есть следующие URL:
  • Код: Выделить всё

    /app/endpoint
    : REST API с несколькими сопоставлениями запросов с выводом JSON.
  • Код: Выделить всё

    /app/login
    : Сопоставление HTML-страницы входа в систему (пока только фиктивный контент, для тестирования).
  • Код: Выделить всё

    /app/index
    : Сопоставление главной страницы HTML (пока только фиктивный контент для тестирования).
У меня есть класс Java для определения авторизации следующим образом:

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

@Configuration
@EnableWebSecurity
public class SecurityConfig {

@Bean
public UserDetailsService userDetailsService() {
InMemoryUserDetailsManager manager =
new InMemoryUserDetailsManager();
manager.createUser(User.withUsername("admin").
password("{noop}admin").roles("ADMIN")
.build());
manager.createUser(User.withUsername("user").
password("{noop}user").roles("USER")
.build());
return manager;
}

@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.requestMatchers("/app/endpoint/**");
}

@Bean
public SecurityFilterChain filterChain(HttpSecurity http)
throws Exception {
http.authorizeHttpRequests((a) ->
a.requestMatchers("/app/endpoint/**").permitAll()
.requestMatchers("/app/login", "/app/index")
.hasAnyRole("ADMIN", "USER")
.anyRequest().authenticated()
).httpBasic(withDefaults());
return http.build();
}
}
Я ожидаю, что пользователь должен предоставить учетные данные для посещения /app/login и /app/index, но сохраняя конечные точки REST API (

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

/app/endpoint/**
) общедоступно без них. Но при выполнении обеих команд я получаю статус 401 вместо статуса 200 для второй:

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

$ curl -k -I https://localhost:8443/app/login
HTTP/1.1 401
WWW-Authenticate: Basic realm="Realm"
(... other headers...)

$ curl -k -I https://localhost:8443/app/endpoint/list
HTTP/1.1 401
WWW-Authenticate: Basic realm="Realm"
(... other headers...)
Думаю, я близок к этому, отредактировав метод filterChain(), но что-то, похоже, не так.


Подробнее здесь: https://stackoverflow.com/questions/798 ... urls-and-p
Ответить

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

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

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

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

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