spring rest API 的所有查询的自定义验证

Posted

技术标签:

【中文标题】spring rest API 的所有查询的自定义验证【英文标题】:Custom validation for all the query of spring rest API 【发布时间】:2020-02-21 19:15:03 【问题描述】:

我正在使用 Spring Rest API,并且我想在进入 rest api 查询之前应用自定义验证(更具体地说,我想检查用户是否经过身份验证,因此我还需要 HttpServletRequest 对象)。

例如,我有 3 个 API。 1.RestAPI/test1 2.RestAPI/test2 3.RestAPI/test3

所以在进行查询之前,我想检查用户是否经过身份验证。

我可以使用ConstraintValidator吗?

我怎样才能做到这一点?

我没有使用弹簧靴...

谢谢!

【问题讨论】:

【参考方案1】:

有以下几种方法:

1) Spring 安全@PreAuthorize("isAuthenticated()")@Secured("ROLE_ADMIN")

查看thread了解更多信息

2)您可以创建自定义注释,添加带有SecurityContextHolder的方面:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Authenticated 


import org.aspectj.lang.annotation.Aspect;
@Aspect
@Component
public class AuthenticatedAspect 

    @Around("@annotation(Authenticated)")
    public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable 
         if (!SecurityContextHolder.getContext().getAuthentication().isAuthenticated()) 
             throw your exeption
         
         return joinPoint.proceed();
    

对于第二种方法,您可能需要添加proxy-target-class="true" <aop:aspectj-autoproxy proxy-target-class="true"/>

【讨论】:

以上是关于spring rest API 的所有查询的自定义验证的主要内容,如果未能解决你的问题,请参考以下文章

Spring REST API,响应中的自定义实体字段

Spring Boot REST API 版本控制的自定义标头方法

如何处理 grails spring-security-rest 插件中的自定义身份验证异常?

php 适用于WCATL 2016的自定义RESTful API

无法显示来自 Wordpress REST API 自定义端点的自定义字段

您将如何使用 Spring Boot 处理仅具有可选查询参数的 REST API?