spring - 在 WebSecurityConfiguration 中注册 PermissionEvaluator
问题描述
假设我有以下 PermissionEvaluator 实现
@Component
public class AlwaysAccessPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetDomainObject,
Object permission) {
return true;
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId,
String targetType, Object permission) {
return true;
}
}
所以我知道如何为方法注释注册它,但我想在 WebSecurity 中使用它。所以我有以下配置类:
@Configuration
public class WebConfig extends WebSecurityConfigurerAdapter{
@Autowired
private AlwaysAccessPermissionEvaluator permissionEvaluator;
@Override
public void configure(WebSecurity web) throws Exception {
var handler = new DefaultWebSecurityExpressionHandler();
handler.setPermissionEvaluator(permissionEvaluator);
web.expressionHandler(handler);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
http.csrf()
.disable()
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/**")
.permitAll()
.antMatchers(HttpMethod.POST, "/foo/{id}/**")
.access("hasPermission(#id, 'example', 'READ')")
.anyRequest()
.denyAll();
}
}
但是,当我现在向 PermissionEvaluator 发送 POST 请求时,/foo/{id}
没有调用,而是收到 403 Forbidden。
那么我怎样才能在那里使用我的 PermissionEvaluator 呢?
解决方案
推荐阅读
- html - 网页抓取 Reed.co.uk 没有返回任何结果
- node.js - 503 Service Unavailable - VueJs forntend、Node 后端和 Akamai 的零大小对象
- jquery - 用户难以选择复选框
- swift - SwiftUI 加载的异步图像未显示
- python - 在特定路线后运行方法 - 烧瓶
- docker - Docker LABEL 在多阶段构建中访问构建映像
- javascript - 如何解决 $('.selector').flatpickr 不是函数?
- angular - Angular 的文档上传问题
- reactjs - 如何更新 ag-grid 日期编辑器的值
- android - 如何在 Android 的 TextView 中显示 Unicode 字符?