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



我有两个配置:

@Order(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));
}

@Order(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/**终结点应保留基本身份验证。怎么做?我看不到带有选择 http 方法类型的选项antMatcher的方法。

编辑:

我需要这样的东西:

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(..)之间的区别在于,当您具有单独的安全配置类时,可以使用antMatcher(..)。当您需要区分以下各项时,这可能是必要的:

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

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

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


但是,如果您确实需要对应应用哪个安全配置类进行精细控制,则应使用注释中提到的RequestMatcher

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

相关内容

  • 没有找到相关文章

最新更新