Spring boot security - почтальон работает с REST, но команда curl не работает - PullRequest
0 голосов
/ 15 января 2019

Я новичок в весенней загрузке, особенно в весенней безопасности. Я провожу тестирование моего простого сервиса REST.

Их два: http://localhost:8080/sayhello и http://localhost:8080/api/sayhello

Моя конфигурация безопасности имеет это:

http.httpBasic().and()
                .authorizeRequests()
                .antMatchers("/api/**")
                .hasRole("USER")
                .anyRequest()
                .fullyAuthenticated();

Я ожидаю, что http://localhost:8080/api/sayhello будет аутентифицирован, а не http://localhost:8080/sayhello

Когда я проверяю http://localhost:8080/sayhello на почтальоне, я вижу правильное сообщение "Привет!".

Но когда я запускаю эту команду curl curl -i -X GET http://localhost:8080/sayhello/, я получаю это:

HTTP/1.1 401
Set-Cookie: JSESSIONID=DDB9A6FF9CBCB9811E141FF17A5D40CB; Path=/; HttpOnly
WWW-Authenticate: Basic realm="Realm"
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Frame-Options: DENY
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 15 Jan 2019 09:11:09 GMT

{"timestamp":"2019-01-15T09:11:09.509+0000","status":401,"error":"Unauthorized","message":"Unauthorized","path":"/sayhello/"}

Пожалуйста, что я делаю не так?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Spring Security включает аутентификацию URL по умолчанию на всех ваших конечных точках. Таким образом, вместо этого проще определить разрешенные URL-адреса. Вот модифицированный код

http.httpBasic().and()
            .authorizeRequests()
            .antMatchers("/sayhello").permitAll()
            .anyRequest()
            .hasRole("USER")
            .fullyAuthenticated();
0 голосов
/ 15 января 2019

По умолчанию все ваши URL-адреса аутентифицируются в Spring-Security.

Используемая строка

http.httpBasic().and()
                .authorizeRequests()
                .antMatchers("/api/**")  // all url with /api/** will be authenticated having role of USER.
                .hasRole("USER")
                .anyRequest()
                .fullyAuthenticated();

Здесь

            .antMatchers("/api/**")
            .hasRole("USER")

Все URL заблокированы фильтром Spring-security. но API, соответствующий шаблону /api/**, должно иметь роль USER. за исключением несоответствия URL должен быть проверен через Spring-security фильтр.

Вы должны использовать, как это.

  .antMatchers("/sayhello/**").permitAll();

ИЛИ

  .anyRequest().permitAll()

добавьте эту строку в httpAuthentication, чтобы вы могли анонимно нажать api http://localhost:8080/sayhello.

или вы можете переопределить configure(WebSecurity web) вот так .. (это также будет работать).

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/sayhello");
}

Спасибо ..

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