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 Boot REST API 版本控制的自定义标头方法
如何处理 grails spring-security-rest 插件中的自定义身份验证异常?
php 适用于WCATL 2016的自定义RESTful API