在Web项目中,我们有一个简单的文件浏览器。为了安全起见,我们需要某种映射,用户角色可以在哪些目录(包括其子目录)中读取(R)或读取+写入(RW)。
的示例:
具有roleA的UserA可以查看folderA /
中的文件带有roleB的UserB查看和编辑folderA /中的文件,还可以查看folderB /
到目前为止,该项目中使用了一些技术:
我一直在寻找Spring Security,但我不确定是否可以在我的用例中使用GrantedAuthority实现(权限)。
所以我的问题是,如果有人有Spring Security的经验并且能够以正确的方式指出我。如果使用Spring Security无法实现,其他图书馆提案也会受到赞赏,但我当然更喜欢使用已经使用的库。
答案 0 :(得分:2)
Spring Security可以使用一些自定义代码。将您的服务图层注释为:
C
实现PermissionEvaluator接口,使其成为Spring bean。然后在安全配置中使用以下命令启用它:
@PostAuthorize("hasPermission(returnObject, 'READ')")
public FileObject readFileObject(String path) {
// return the file object from DAO
}
@PreAuthorize("hasPermission(#fileObj, 'WRITE')")
public void writeFileObject(FileObject fileObj) {
// write the file object, security check made at this point
}
和
@Autowired
private PermissionEvaluator permissionEvaluator;
@Bean
public DefaultMethodSecurityExpressionHandler expressionHandler() {
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
handler.setPermissionEvaluator(permissionEvaluator);
return handler;
}