Spring REST 控制器的安全性

Spring security for REST controllers

我正在为我的 REST 控制器和文档使用 Spring MVC 和 Spring 安全性。我想保护三个不同的路径:

显然,此代码仅适用于最后一个:“/api-documentation”。我也尝试过 antMatchers("/api/**","/api-docs","/api-documentation") 但我不知道如何正确配置.有什么想法吗?

http
    .csrf().disable()
    .exceptionHandling().authenticationEntryPoint(entryPoint())
    .and()                  
    .antMatcher("/api/**")            
    .antMatcher("/api-docs") 
    .antMatcher("/api-documentation") 
    .authorizeRequests()
    .anyRequest().hasRole("REST")
    .and()
    .httpBasic();

您必须指定谁可以访问指定路径:

.antMatchers("/api/**").permitAll() 
.antMatchers("/api-docs").hasRole("ADMIN")

这里有一些路径匹配建议。

"/api/**" 将匹配 /api/x/y.

等所有方法

"/api-docs" 只会与 /api-docs 匹配。同样 /api-documentation.

如果你添加 "/api-docs/*" 它将映射 /api-docs/x

这里有some useful resources蚂蚁图案。

因此,

http
.csrf().disable()
.exceptionHandling().authenticationEntryPoint(entryPoint())
.and()                  
.antMatchers("/api/**","/api-docs","/api-documentation")
.authorizeRequests()
.anyRequest().hasRole("REST")
.and()
.httpBasic();

必须工作,根据您的路径规范要求。

对于这种情况,只需要将 antmatcher 更改为 .antMatcher("/api*") 删除其他两个。