У меня есть такая веб-конфигурация в 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) я получаю сообщение «Неавторизованный». Что я делаю не так?
Мой снимок связан с " .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
// ...
}
}
Если вы получаете Unauthorize (401), это означает, что аутентификация не удалась, независимо от того, есть ли у вас доступ к ресурсу или нет. Вы используете базовую аутентификацию, а весенний поток состоит из двух частей: аутентификации и авторизации, сначала он аутентифицируется, чтобы узнать, действителен ли пользователь, а затем видно, есть ли у него авторизация для доступа к ресурсу. В этом случае ошибка выдается из-за того, что у нее нет аутентификации, более известной как 401, если у вас есть аутентификация и нет авторизации, вы получите 403 запрещено
В моем случае мне нужно удалить контекстный путь из файла свойств. Я удалил это:
server.servlet.context-path=/api
после того, как я удалил это значение, все пошло правильно. Но я до сих пор не знаю, почему это не будет работать с контекстным путем.
По ошибке я создал пакет конфигурации на уровень выше... Спасибо за помощь!