我将此依赖项添加到我的Spring Boot应用程序中
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.4.3</version>
<type>pom.sha512</type>
</dependency>
然后我可以打开:https://localhost:8443/v3/api-文件
浏览器确实会询问我的凭据,只要我输入用户/密码,它就可以工作,但它会向我显示全球可用的所有方法。我只希望用户有权使用的方法出现在api文档中。
对于特定的方法是使用此标记来授权我的调用:@PreAuthorize("hasRole('USER')OR hasRole('ADMIN')")
这是我的web安全配置类:
@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter
{
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception
{
auth.inMemoryAuthentication()
.passwordEncoder(new BCryptPasswordEncoder())
.withUser("user").password(new BCryptPasswordEncoder().encode("blabl")).roles("USER")
.and()
.withUser("admin").password(new BCryptPasswordEncoder().encode("blabla")).roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception
{
http.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
我怀疑这是否可能,因为API留档是在启动时生成的(我认为)。
您可以做的是添加文档,指定哪些API调用需要哪些安全凭据,我在https://github.com/springdoc/springdoc-openapi#adding-api信息和安全文档
因此,如果用户能够看到API页面,那么它也可能会看到它无权访问的endpoint(例如/admin),但您可以向其中添加文档,使该endpoint只能由管理员访问。
根据你提供的描述,我建议如下。
例如:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/rest/admin/**").hasAnyRole("ADMIN").and()
.httpBasic()
.and()
.csrf().disable();
}
例如:
@PreAuthorize("hasRole('ROLE_USER')")
或
@PreAuthorize("hasRole('ROLE_ADMIN')")
然后,它应该像预期的那样工作。
此外,如果它仍然不能按预期工作,我建议为每个角色创建两个单独的groupedepanapi
,并根据超级角色的路径标识符(即在您的情况下为ADMIN
)分隔API,并在各自的AntMatcher上创建各自的安全配置(例如:.antMatchers(“/rest/ADMIN/**”)。hasAnyRole(“管理员”)
)。然后,当您在每个角色的路径上配置安全性,以及为文档配置单独的GroupedOpenApi时,这应该会起作用。
注:我会先尝试第一种方法,只使用第二种方法作为后备方法。
问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如https://user:pass@host/)的子资源请求被阻止。有关更多详细信息,请参见https://www.chromestatus.com/feature/5669008342777856。 在标记的链接中提到该
我不熟悉RESTful API的概念。 我正在为一家在线商店设计一个RESTful API。 我没有正确理解SSL上的基本HTTP身份验证的概念。 这是否意味着对于每个请求,用户都必须再次输入他/她的用户名和密码? 有人能详细解释它的功能和用途吗?
问题内容: 从HttpClient 4.3开始,我一直在使用HttpClientBuilder。我正在连接到具有基本身份验证的REST服务。我将凭据设置如下: 但是,这不起作用(我正在使用的REST服务返回401)。怎么了? 问题答案: 从此处的 抢先身份验证 文档中: http://hc.apache.org/httpcomponents-client- ga/tutorial/html/aut
问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如)的子资源请求被阻止。 在标记的链接中提到该支持已被删除: 在子资源请求中放弃对嵌入式凭据的支持。(已删除) 我现在的问题是,是否有另一种方法可以从Selenium进行基本身份验证? 问题答案: 对此进行了一些更新 : 在
所以我正忙着为twitter开发一个应用程序,我希望人们使用PIN进行身份验证。(https://dev.twitter.com/oauth/pin-based). 要向人们显示PIN码,我需要使用以下命令:https://dev.twitter.com/oauth/reference/get/oauth/authorize 那里的例子说:https://api.twitter.com/oauth
目前我正在开发一个Java工具,它应该可以更新Confluence服务器页面。使用Curl一切都像一个符咒,但是当使用Postman或Java代码(HttpClient Java11)时,我得到了一个 HTTP状态401–未经授权 反应。 在下面的语句中使用curl curl--basic-u user:password-X PUT-H“内容类型:application/json”-d“@test