gpt4 book ai didi

java - Spring Security - antMatcher 的 POST 方法(不是 antMatchers)

转载 作者:行者123 更新时间:2023-11-30 05:43:01 25 4
gpt4 key购买 nike

我有两种配置:

@订单(1)

@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasRole("USER")
.and()
.httpBasic()
.and()
.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.exceptionHandling()
.authenticationEntryPoint(new ApiAuthenticationEntryPoint(objectMapper));
}

@订单(2)

http.authorizeRequests()
.antMatchers("/product/**").hasRole(SecurityRoles.USER)
.and()
.formLogin()
.loginPage("/login")
.loginProcessingUrl("/authenticateTheUser")
.successHandler(customAuthenticationSuccessHandler)
.permitAll()
.and()
.logout()
.permitAll()
.and()
.exceptionHandling()
.accessDeniedPage("/access-denied");

我需要添加功能以在无需身份验证的情况下使用 REST 端点 /api/users 注册新用户。其他 /api/** 端点应保留基本身份验证。这个怎么做?我看不到 antMatcher 方法以及选择 http 方法类型的选项。

编辑:

我需要这样的东西:

http.antMatcher("/api/users", HttpMethod.POST.toString).permitAll()
.and()
.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasRole("USER")
(...)

最佳答案

您可以使用 antMatchers() 来做到这一点:

http
.antMatcher("/api/**")
.authorizeRequests()
.antMatchers(HttpMethod.POST, "/api/user").permitAll()
.anyRequest().hasRole("USER")

antMatcher(..)antMatchers(..) 之间的区别在于,当您有单独的安全配置类。当您需要区分以下内容时,这可能是必要的:

  • 身份验证机制(表单登录、基本身份验证...)
  • CSRF 处理
  • session 管理
  • 过滤器
  • 用户详细信息服务
  • ...

另一方面,antMatchers(..)(在authorizeRequests(..)内)用于区分授权级别(哪些角色可以访问某些端点)。

在您的情况下,配置属于后者,因为您只需要区分 POST/api/user 端点的权限。

<小时/>

但是,如果您确实需要更精细地控制应应用哪个安全配置类,那么您应该使用 RequestMatcher正如评论中提到的。

此接口(interface)有一个 HttpServletRequest 参数,并期望您返回一个 boolean。由于 HttpServletRequest 包含您需要的所有信息,例如路径和 HTTP 方法,因此您可以正确调整应应用哪个配置类。但是,在这种情况下没有必要。

关于java - Spring Security - antMatcher 的 POST 方法(不是 antMatchers),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55338789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com