Spring Security - неавторизованный, хотя и разрешающий все запросы

У меня есть такая веб-конфигурация в Spring Boot App:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests().anyRequest().permitAll()
        .and()
                .csrf().disable()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
        .and()
                .httpBasic();
    }
}

при попытке получить доступ к одному из URL-адресов (localhost: 8080/test) я получаю сообщение «Неавторизованный». Что я делаю не так?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
0
1 053
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Мой снимок связан с " .httpBasic();", похоже, вы ожидаете обычную аутентификацию, когда устанавливаете это в своих свойствах.

Ответ принят как подходящий

Я думаю, что ваш WebConfigпомещен не в ту упаковку. Если ваш @SpringBootApplication аннотированный класс находится в com.example.demo тогда ваш класс WebConfig должен быть помещен в пакет com.example.demo (или другой подпакет, например: com.example.demo.config).

package com.example.demo.config; // <-- move it to the (not-default) package

// skipped imports
// ...

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
      // config same as in the question's snippet
      // ...
    }
}

По ошибке я создал пакет конфигурации на уровень выше... Спасибо за помощь!

Ilya G. 13.12.2020 19:53

Если вы получаете Unauthorize (401), это означает, что аутентификация не удалась, независимо от того, есть ли у вас доступ к ресурсу или нет. Вы используете базовую аутентификацию, а весенний поток состоит из двух частей: аутентификации и авторизации, сначала он аутентифицируется, чтобы узнать, действителен ли пользователь, а затем видно, есть ли у него авторизация для доступа к ресурсу. В этом случае ошибка выдается из-за того, что у нее нет аутентификации, более известной как 401, если у вас есть аутентификация и нет авторизации, вы получите 403 запрещено

В моем случае мне нужно удалить контекстный путь из файла свойств. Я удалил это:

server.servlet.context-path=/api

после того, как я удалил это значение, все пошло правильно. Но я до сих пор не знаю, почему это не будет работать с контекстным путем.

Другие вопросы по теме