因此我们有一个授权服务器,我们使用它来创建OAuth2访问令牌。所有子系统都验证访问令牌,并可以检查请求路径的权限,但是,在其中一个子系统中,我们需要查看请求正文并提取“ID”。检查用户是否具有提交请求的适当权限。请求消息是JSON格式,这是一个带有客户端提供的id的POST请求。
请求中的id是进程ID,某些用户可能没有对某些进程的权限,因此我们需要id来验证。
因此,在AccessDecisionVoter
中,我们只能获取请求URI但我无法获取HttpServletRequest
来阅读该消息。 (注意:我们有一个Request包装器,允许我们多次读取请求体)
我试图自动连线HttpServletRequest
,没有运气。有一个错误,没有线程绑定到请求
我也在考虑实现UserDetailService
但是再没有运气,因为Spring引导没有调用它。请记住,我们使用的是自定义AuthorizationServerTokenServices
,它位于公共库中。
如何在AccessDecisionVoter
?
答案 0 :(得分:0)
您应该能够实现AccessDecisionVoter<FilterInvocation>
,以便获取请求。这不起作用:
public class MyAccessDecisionVoter implements AccessDecisionVoter<FilterInvocation> {
@Override
public boolean supports(ConfigAttribute attribute) {
return false;
}
@Override
public boolean supports(Class<?> clazz) {
return true;
}
@Override
public int vote(Authentication authentication, FilterInvocation fi, Collection<ConfigAttribute> attributes) {
int result = ACCESS_ABSTAIN;
fi.getRequest() // this is the request
// decide the outcome and set result
return result;
}
}