Обновление привода пружинной загрузки и обновление шины всегда возвращают 401 несанкционированный

#spring-boot #spring-security #spring-boot-actuator

#пружинный загрузчик #пружинная защита #пружинный загрузчик-привод

Вопрос:

Я нажимаю на bus-refresh конечную точку из моего Jenkins, и я хотел, чтобы эта конечная точка не была защищена.

Ниже представлено мое приложение.yml

 management:
  endpoints:
    web:
      exposure:
        include: health,refresh,bus-refresh
      base-path: /
  health:
    ldap:
      enabled: false
  

Ниже приведена моя http-конфигурация в spring-boot

 http
                    .anonymous()
                    .and()
                    .authorizeRequests()
                    .antMatchers("/swagger-ui.html", "/error", "/swagger-resources/**", "/webjars/**", "/v2/api-docs", "/test/**", "/api/v1/calculate/**").permitAll()

                    .antMatchers("/health", "/refresh/", "/bus-refresh/").permitAll()

                    .anyRequest().authenticated()
                    .and()
                    .oauth2ResourceServer()
  

Теперь, когда я нажимаю curl --request GET http://localhost:8080/health , я получаю правильный ответ, как показано ниже

{"status":"UP"}

но когда я нажимаю curl --request POST http://localhost:8080/bus-refresh

или curl --request POST http://localhost:8080/refresh

я получаю 403 и 401

{"timestamp":"2020-08-26T10:46:26.370 00:00","status":403,"error":"Forbidden","message":"","path":"/bus-refresh"}

Я перепробовал все, что мог, но все еще не могу вывести оба refresh и bus-refresh из системы безопасности. Нужна помощь

Комментарии:

1. Вы поняли это? У меня такая же проблема, и я понятия не имею, что не так.

2. нет .. я предпочел защитить конечную точку и заставил свой конвейер извлекать токен-носитель каждый раз, когда он попадает в конечную точку

Ответ №1:

Я спрашиваю это на всякий случай, потому что я не видел этого в вашем примере. В вашей конфигурации у вас есть:

 http
...
.antMatchers("/health", "/refresh/", "/bus-refresh/").permitAll()
...
  

В конечной точке работоспособности вы не установили косую черту в конце, поэтому при вызове curl --request GET http://localhost:8080/health вы получаете правильный ответ, как вы и сказали. Но затем вы вызвали refresh и bus-refresh без завершающей косой черты, и обе конечные точки были определены с ее помощью. Вы пытались свернуть эти конечные точки, как они были определены в вашей конфигурации http? (с завершающей косой чертой)

Надеюсь, это поможет, дайте мне знать, если это сработает.