java—根据调用的方法在SpringRESTAPI中应用身份验证过滤器

uhry853o  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(284)

我们有一个基于springboot的restapi,其中包含一些公共方法和一些私有方法。
我们实施了 AbstractAuthenticationProcessingFilter 处理jwt身份验证,一切正常。
但是,我们只想在私有方法上应用这个过滤器,因为公共方法不需要任何身份验证。问题是url不能用于分离公共和私有方法(即,/account/get/{id}是公共的,但是/account/personal/{id}是私有的,在所有私有或所有公共url之间没有公共模式)。
看来 HttpSecurity 只允许我们使用url来应用过滤器,当我们更愿意应用身份验证过滤器时,只有当一个方法 @PreAuthorize 被称为。
我们设想的唯一方法是使用反射,并在web安全配置期间,在运行时使用 @PreAuthorize ,找到它们的url,并使用这些url构建一个requestmatcher,列出它们的所有精确端点。
有更简单的解决办法吗?

93ze6v8z

93ze6v8z1#

你的问题我不清楚,我猜你想用jwt访问私有api,而不用jwt访问公共api。如果是这样,只需在websurity中提及api路径即可忽略jwt身份验证。
下面的代码用于手动更新不排序的api。

@Override
    public void configure(WebSecurity web) {
        web.ignoring()
            .antMatchers(HttpMethod.GET, "/api/url1", "/api/url2")
            .antMatchers(HttpMethod.POST, "/api/url3");
    }

除了websecurity中提到的api之外,将是一个授权访问
下面是以 /api/public ```
@Override
public void configure(WebSecurity web) {
web.ignoring()
.antMatchers("/api/public/**");
}

相关问题