spring - Spring Security - 尽早授权访问
问题描述
我想知道 - 你可以提前拒绝访问(用户已经通过身份验证) ,而不处理整个过滤器链,你可以做同样的事情来授予访问权限吗?
目前我正在研究投票机制(AccessDecisionManager
, AccessDecisionVoter
),但似乎不可能实现这样的事情。
public class MyVoter implements AccessDecisionVoter<Object> {
@Override
public int vote(Authentication authentication, Object object, Collection collection) {
var principal = authentication.getPrincipal();
if (principal instanceof MyUserDetails) {
var myUser = (MyUser)principal;
if(myUser.isAdmin()) {
// stop further processing at this point, admin has access anywhere
return ACCESS_GRANTED;
}
}
// could not decide - forward request to concrete, business logic evaluators
return ACCESS_ABSTAIN;
}
@Override
public boolean supports(ConfigAttribute attribute) {
// no custom ConfigAttribute's - process all
return true;
}
@Override
public boolean supports(Class clazz) {
// no customization for class - should process ALL requests
return true;
}
}
在这里,我只提供了一个虚拟示例,实际授予访问权限的规则更复杂,但我的想法有望得到解释。
解决方案
推荐阅读
- scala - 如何解决“crossPaths := false”和“+publish”之间的交互?
- python - 为什么使用 .loc[] 访问 pandas 数据框的列会产生重复的行?
- php - PHP停留在“等待本地主机”
- c# - 如何从自适应卡检测/监听 action.submit
- java - 如何优化此正则表达式以在空格和标点符号上分割线(减去撇号)
- java - 创建后如何更改片段布局
- java - FilterList / 从 Android Studio 中的列表中搜索不起作用。我需要帮助,因为我没有 IDEA。
- javascript - 测试 div 大小更改
- c++ - 在 C++ 中读取和操作 WAV 文件
- c - C - 对具有可变长度元素的大型二进制文件进行排序