java - 对 Spring Rest API 的所有查询进行自定义验证

标签 java spring rest api spring-security

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

例如,我有 3 个 API。 1.RestAPI/测试1 2.RestAPI/测试2 3.RestAPI/test3

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

我可以使用 ConstraintValidator

我怎样才能实现这个目标?

我没有使用 Spring Boot...

谢谢!

最佳答案

有以下几种方法:

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"/>

关于java - 对 Spring Rest API 的所有查询进行自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58558450/

相关文章:

java - 如何在 toString 中使用循环?

java - 无法使用javamail api从hotmail帐户获取未读邮件

java - 为什么我的数组搜索在搜索循环超过 2000 次后花费了 0 纳秒?

spring - Tomcat 服务器遇到 404 原因不明

java - spring中哪个类实现了JpaRepository接口(interface)

java - 为什么使用 Jersey 客户端进行 POST 调用时出现 400 错误代码

python - 在 gunicorn 中为不同的端点配置不同的超时?

java - 使用 JAXB 解析 XML

Spring Boot拦截器返回JSON

java - PersonResource 与 spring-hateoas 中的 Person 是一样的吗