如何在没有Secure@Getmap的情况下通过Spring Security保护@Postmap端点

izj3ouym  于 2022-10-23  发布在  Spring
关注(0)|答案(1)|浏览(141)

我想在我的应用程序中添加一些端点上的Spring Security。

@RestController
@RequestMapping("/test")
@RequiredArgsConstructor
public class TestController {

    @PostMapping
    public ResponseEntity post() {
        ...
    }

    @GetMapping
    public ResponseEntity get() {
        ...
    }

在Web安全安全适配器中,我知道如何保护Endpoit。我做到了:

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
    private final MyUserDetailsService myUserDetailsService;

    @Override
    public void configure(HttpSecurity http) throws Exception {

        http.httpBasic().and()
            .cors().and().csrf().disable()
            .authorizeRequests()
            .antMatchers("/users", "/users/**").permitAll()
            .anyRequest().authenticated()
            ;
    }

在端点“/test”中,我想在@Postmap中添加安全性,只有经过身份验证的用户才能发布内容。@Getmap将向所有人开放。

编辑所以我更新了我的MyWebSecurityConfig:

@Override
public void configure(HttpSecurity http) throws Exception {
    http.httpBasic().and()
            .cors().and().csrf().disable()
            .authorizeRequests()
            .antMatchers("/users", "/users/**").permitAll()
            .antMatchers(HttpMethod.GET, "/shapes").permitAll()
            .antMatchers(HttpMethod.GET, "/shapes/history").permitAll()
            .anyRequest().authenticated()
            ;
}

但如果没有身份验证,我仍然无法发送Get On“/Shares”endpoit。我仍然收到401未经授权的电话。我应该换些什么?

3bygqnnd

3bygqnnd1#

antMatchers()有一个覆盖版本,允许您配置将HTTP方法和路径匹配在一起:

.authorizeRequests()
  .antMatchers("/users", "/users/**").permitAll()
  .antMatchers(HttpMethod.GET,"/test").permitAll()
  .antMatchers(HttpMethod.POST, "/test").authenticated()

相关问题