我已经使用spring-boot-starter-oauth2-authorization-server.实现了一个授权服务器 一切似乎都运行得很完美.但是,我需要公开一些用于创建用户、获取用户权限等的端点,因此我需要将身份验证服务器配置为也充当资源服务器.

我需要"POST/USERS"在没有授权的情况下成为公共的,而"GET/USERS/{USERID}/PERMISSIONS"则需要一个有效的JWT令牌出现在标题中.

我曾try 创建一个SecurityFilterChain Bean,它允许访问/USERS端点,但它 destruct 了授权服务器:

@Bean
  public SecurityFilterChain configureSecurityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeHttpRequests(authorizeRequests -> authorizeRequests
        .requestMatchers(HttpMethod.POST, "/users").permitAll()
        .anyRequest().authenticated());
    http.csrf(AbstractHttpConfigurer::disable);
    return http.build();
  }

我确信为特定端点创建授权定制是可能的,但如何创建呢?

推荐答案

一旦您超越了Getting Started体验,相同的文档页面将介绍如何使用Spring Boot提供的define the same components,这样您就可以开始定制配置了.由于使用了Spring Boot,每个组件都是可选的.特别要注意的是,它使用@Order注释定义了两个SecurityFilterChain @Bean,并注意第一个包括:

OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);

如果没有该行(或将包含在其中的代码复制到您自己的代码中),将不会设置授权服务器的协议端点,这就是为什么您注意到

但它 destruct 了授权服务器

Java相关问答推荐

如何为具有多对多关系的实体的给定SQL查询构建JPA规范?

当一个链表中间有一个循环时,它的松散部分会发生什么?

Listview—在Android Java中正确链接项目时出错

屏蔽字母数字代码的Java正则表达式

弹簧靴和龙目岛

为什么我们不能实现两个接口,其中一个接口有相同的签名,其中一个接口有默认的实现在java?'

Java inline Double条件和值解装箱崩溃

使用动态ID从json获取详细信息的Jolt规范

这是什么Java构造`(InputStream Is)->;()->;{}`

Bean定义不是从Spring ApplationConext.xml文件加载的

当Volatile关键字真的是必要的时候?

将java.util.Date转换为OffsetDateTime

与不同顺序的组进行匹配,不重复组但分开

我如何知道MediaDiscoverer何时完成发现介质?

Jolt变换JSON数组问题

在添加AdMob时无法为Google Play构建应用程序包:JVM垃圾收集器崩溃和JVM内存耗尽

支持MySQL 5.6的最新Hibernate版本

在VS代码中,如何启用Java Main函数的&Q;Run|DEBUG&Q;代码?

从映射列表中检索所有键

如果第一位数字和最后一位数字相差超过一位,您将如何获得随机数?