Spring Security с безопасностью по умолчанию дает 401 для PUT и 200 для GET - PullRequest
0 голосов
/ 29 марта 2020

Я разработал приложение весенней загрузки с базовым уровнем безопасности c. У меня есть две конечные точки с одинаковым путем и разными методами http. Когда я включаю защиту basi c с паролем по умолчанию / паролем, указанным в application.yml, api / products / {id} GET аутентифицируется, а api / products / {id} PUT дает 401 несанкционированный доступ.

В чем проблема с моим кодом? Я что-то упустил, понимая безопасность Spring? Любые ссылки, которые я, возможно, пропустил для весенней безопасности, будут полезны?

Мои фрагменты кода, как показано ниже,

Мой контроллер

@RestController
@RequestMapping(value = "api")
public class ProductController {

    @RequestMapping(value = "/products/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<Object> getById(@PathVariable(value = "id") Integer id) {
           //Implementation

    }

    @RequestMapping(value = "/products/{id}", method = RequestMethod.PUT, consumes = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity updateById(@PathVariable(value = "id") Integer id,
                                                                   @RequestBody UpdateProductRequest updateProductRequest) {
        //Implementation
    }
}

application.yml

spring:
  security:
    user:
      name: admin
      password: admin

зависимости build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    compile group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign', version: '2.2.0.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'

    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
    implementation 'junit:junit:4.12'
}

Заранее спасибо

Обновлено со скриншотами почтальона: enter image description hereenter image description here

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Возможно, это проблема конфигурации Csrf.

Необходимо переопределить WebSecurityConfigurerAdapter

Попробуйте это ..

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
    http.cors();
    http.authorizeRequests().anyRequest().fullyAuthenticated();
    http.httpBasic();
  }
}
0 голосов
/ 29 марта 2020

Ваша проблема - подделка межсайтовых запросов (CSRF). См. этот вопрос и его ответ.

Для получения дополнительной информации о CSRF см. этот сайт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...