需要提取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
),如果用户没有访问权限,则该方法无法执行
暂无答案!
目前还没有任何答案,快来回答吧!