gpt4 book ai didi

java - 基于自定义 header 的 Spring Security antMatcher 规则

转载 作者:行者123 更新时间:2023-11-29 04:08:12 27 4
gpt4 key购买 nike

在 Spring 框架内,我目前正在尝试使用自定义 header 而不是 url 来区分某些端点。目前,我似乎看不出如何允许带有自定义 header 的特定 URL,但在 Spring Security 中拒绝另一个 URL。我的安全配置当前有一个 antMatcher,如下所示:

.antMatchers( HttpMethod.POST, "/api/website-user" ).permitAll()

但是我还有一些其他的“POST”方法也受到保护——对于这个特定的端点,我只希望通过发送的 header 识别和排除它。

你如何告诉 Spring 安全这个 URL 应该通过未经身份验证的方式传递

 @PostMapping( headers = "X-Operation-Name=forgot-password" )
public WebsiteUser forgotPassword( @Valid PasswordResetRequestModel passwordReset )

但是这个例如没有(并且依赖于经过身份验证的用户)?

@PostMapping( headers = "X-Operation-Name=resend-verification" )
public WebsiteUser resendVerification( Principal principal )

最佳答案

您始终可以实现 RequestMatcher 来定义您自定义的 HTTP 请求匹配逻辑。如果匹配器为 HTTP 请求返回 true,它将允许该请求访问:

public MyRequestMatcher implements RequestMatcher {

boolean matches(HttpServletRequest request){
//Define the matching logic here....
if(request.getHeader("xxx") != null &&
request.getHeader("xxx").equals("yyyy"){
return true;
}
//blablablab
}
}

并配置使用这个匹配器:

 httpSecurity.authorizeRequests().requestMatchers(new MyRequestMatcher()).permitAll();

Spring Security还提供了一些常用的RequestMatcher比如RequestHeaderRequestMatcherAndRequestMatcher,应该可以满足你的需求:

//This matches if the request has X-Operation-Name header and its value is forgot-password
RequestHeaderRequestMatcher headerMatcher = new RequestHeaderRequestMatcher("X-Operation-Name","forgot-password" );

// This matches if the request is POST to the /api/website-user
AntPathRequestMatcher antRequestMatcher = new AntPathRequestMatcher("/api/website-user", HttpMethod.POST)

// This matches if both of the above matches matches
AndRequestMatcher andMatcher = new AndRequestMatcher(headerMatcher,antRequestMatcher );

httpSecurity.authorizeRequests().requestMatchers(andMatcher).permitAll();

关于java - 基于自定义 header 的 Spring Security antMatcher 规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56889156/

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