当前位置: 首页 > 知识库问答 >
问题:

在处理webhook时,我会收到未经授权的401

张晔
2023-03-14

当处理webhook时,我得到一个未经授权的401,我使用Spring Security和Vaadin

@RestController
@Log4j2
public class WebHookController {

  @Inject
  KeywordPlanService service;
  @Inject
  SheetsService sheetsService;

  MainView view;

  @PostMapping("/notifications")
  @AnonymousAllowed
  public ResponseEntity<Void> webHookHandler(HttpServletRequest request) {
    String headerGoogChanged = request.getHeader("x-goog-changed");
    if (!ObjectUtils.isEmpty(headerGoogChanged) && headerGoogChanged.contains("content")) {
      service.parseDashboardAndSave(view.getGrid(), sheetsService.readSheetValuesBatch());
      sheetsService.writeSheetValuesBatch(service.getKeyWordDashboards());
      log.info("Push notification processed: {}", request);
    }
    return ResponseEntity.ok().build();
  }
}

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends VaadinWebSecurityConfigurerAdapter {

  private static final String LOGIN_URL = "/login";

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    super.configure(http);
    http
        .oauth2Login()
        .loginPage(LOGIN_URL)
        .permitAll();
  }...

我知道我需要公开我的endpoint

/通知

如何公开endpoint?

已更新

   @Override
      protected void configure(HttpSecurity http) throws Exception {
        super.configure(http);
        http.authorizeRequests()
            .antMatchers("/notifications")
            .permitAll()
            .anyRequest()
            .authenticated()
            .and()
            .oauth2Login()
            .loginPage(LOGIN_URL);
    
    
      }

引发消息

2022-06-10 17:39:30.040WARN 37089 --- [ restartedMain]ConfigServletWebServerApplication Context:在上下文初始化期间遇到异常-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“springSecurityFilterChain”的bean时出错在类路径资源[org/springFramework/Security/config/注释/web/配置/WebSecurityConfiguration.class]中定义2022-06-10 17:39:30.041WARN 37089 --- [ restartedMain]中定义的名称为“springSecurityFilterChain”的bean错误:通过工厂方法的Bean实例化失败;嵌套异常org.springframework.beans.BeanInstantiationException:无法实例化[javax.servlet.过滤器]:工厂方法“springSecurityFilterChain”抛出异常;嵌套异常java.lang.IllegalStateException:无法在任何请求之后配置antMatcher。

启动ApplicationContext时出错。要显示条件报告,请在启用“调试”的情况下重新运行应用程序。2022-06-10 17:39:30.074错误37089---[restartedMain]o.s.boot。SpringApplication:Application运行失败

已断开与目标VM的连接,地址:“127.0.0.1:64031”,传输:“socket”

进程完成,退出代码为0

共有2个答案

鲁乐
2023-03-14

我不同意停用任何endpoint的安全性,即使通知应该由授权应用程序完成。

要禁用特定终结点的安全性,请尝试以下操作:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends VaadinWebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception{
        http.authorizeRequests().antMatchers("/notifications").permitAll();
        super.configure(http);
    }
}
涂玉韵
2023-03-14

添加这行代码:

 .antMatchers("/notifications").permitAll()

因此,在你的情况下,它将是这样的:

http.authorizeRequests()
      .antMatchers("/notifications")
      .permitAll()
      .anyRequest()
      .authenticated()
      .and()
      .oauth2Login()
      .loginPage(LOGIN_URL);
 类似资料:
  • 为什么当我试图从这里的主机获取信息时,我会收到401错误? 我在用我的代币,那不是应该给我完全的权限吗?

  • 我在Spring 4中使用以下内容通过RestTemplate检索JSON: 我使用相同的代码(具有不同的响应类)成功地从相同的站点获得JSON文档(具有不同的参数以获得不同的文档)。 当我执行上述代码时,我收到以下堆栈跟踪(部分): 有人能告诉我为什么这可能会收到异常吗?

  • 这是我尝试过的: 正如这里所解释的,有一些要求: > 步骤1:验证您拥有该域。(使用网站管理员工具完成站点验证过程) null 自签名证书。 由不受信任的来源签名的证书。 已吊销的证书。 主题与目标主机名不匹配的证书。 我所做的: 我已经用SSL证书设置了。 而且,endpoint是可达的,所有内容都检查出来了。 SSL检查器已验证一切正常(5个勾)。即使是SSL链也是正确设置的。检查! null

  • 问题内容: 我从Nexus存储库中检出了代码。我更改了帐户密码,并在文件中正确设置了密码。在执行时,我收到错误消息,说明它尝试从该存储库下载文件。 任何想法如何解决此错误?我在Maven 3.04中使用Windows 7 问题答案: 这里的问题是所使用的密码出现错字错误,由于密码中使用了字符/字母,因此很难识别。

  • 我想控制运行在Eureka服务器中的微服务。我为此使用了spring-boot-admin,但我在访问关于跟踪、日志等的信息时遇到了错误... 我得到的错误是 同样的事情也发生在所有endpoint上,比如映射,env和所有接受健康