java.lang.method inside@preauthorize(“haspermission(,def)”)并撤销当前用户身份验证

ws51t4hk  于 2021-06-30  发布在  Java
关注(0)|答案(0)|浏览(243)

需要提取java.lang.method和它的注解(在我有了这个方法之后就很容易了),以允许当前用户访问这个方法。
我有以下控制器:

@RestController
public class TestController {
    @GetMapping("hello")
    @PreAuthorize("hasPermission(this, principal)")  // 'this' return the class, not the method. 'principal' the jwt token
    public String hello1() {
        return "Hello World!";
    }
}

以及permissionevaluator实现

public class PermissionEvaluatorImpl implements PermissionEvaluator {
    @Override
    public boolean hasPermission(Authentication auth, Object targetObject, Object permission) {
        return something;
    }

    @Override
    public boolean hasPermission(Authentication auth, Serializable targuetID, String type, Object permission) {
        return something;
    }
}

如何使其中一个方法接收java.lang.method对象,如下所示:

Method method = ((Method) someAttribute);  // like this
Method method = ((Method) someAttribute.getSomething().getSomething().getSomething().getMethod());  // or like this

编辑:需要在 PermissionEvaluator 提取签名、参数和其他方法的注解,以推广该方法 PermissionEvaluator 尽可能地,并让负责评估权限的方法根据元信息的注解 @PreAuthorize 去另一个班级。
注:
我正在使用oauth2(不知道是否相关) http.authorizeRequests().anyRequest().authenticated() (所有请求都需要身份验证)
总是在方法执行之前调用验证( @PreAuthorize ),如果用户没有访问权限,则该方法无法执行

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题