简单的文件浏览器权限
Simple file browser permissions
在网络项目中,我们有一个简单的文件浏览器。为了安全起见,我们需要某种映射哪些用户角色可以在哪些目录(包括它们的子目录)中读取 (R) 或读写 (RW)。
示例:
具有角色 A 的用户 A 可以查看文件夹 A/
中的文件
- 角色 A,"folderA/",R
具有角色 B 的用户 B 查看和编辑文件夹 A/ 中的文件,还查看文件夹 B/
- 角色 B,"folderA/",RW
- 角色 B,"folderB/",R
目前项目中使用的一些技术:
- 挂毯
- 休眠
- Spring 安全性(目前仅用于用户和角色)
我一直在深入研究 Spring 安全性,但不确定我是否可以为我的用例使用 GrantedAuthority 实施(权限)。
所以我的问题是,是否有人有 Spring 安全方面的经验并能为我指出正确的方法。如果无法使用 Spring 安全性,其他库建议也很受欢迎,但我当然更喜欢使用已经在使用的库。
Spring 使用一些自定义代码的安全性是可能的。将您的服务层注释为:
@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
}
实现PermissionEvaluator接口,使其成为Spring bean。然后在安全配置中启用它:
@Autowired
private PermissionEvaluator permissionEvaluator;
@Bean
public DefaultMethodSecurityExpressionHandler expressionHandler() {
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
handler.setPermissionEvaluator(permissionEvaluator);
return handler;
}
并且:
<global-method-security pre-post-annotations="enabled">
<expression-handler ref="expressionHandler" />
</global-method-security>
在网络项目中,我们有一个简单的文件浏览器。为了安全起见,我们需要某种映射哪些用户角色可以在哪些目录(包括它们的子目录)中读取 (R) 或读写 (RW)。
示例:
具有角色 A 的用户 A 可以查看文件夹 A/
中的文件- 角色 A,"folderA/",R
具有角色 B 的用户 B 查看和编辑文件夹 A/ 中的文件,还查看文件夹 B/
- 角色 B,"folderA/",RW
- 角色 B,"folderB/",R
目前项目中使用的一些技术:
- 挂毯
- 休眠
- Spring 安全性(目前仅用于用户和角色)
我一直在深入研究 Spring 安全性,但不确定我是否可以为我的用例使用 GrantedAuthority 实施(权限)。
所以我的问题是,是否有人有 Spring 安全方面的经验并能为我指出正确的方法。如果无法使用 Spring 安全性,其他库建议也很受欢迎,但我当然更喜欢使用已经在使用的库。
Spring 使用一些自定义代码的安全性是可能的。将您的服务层注释为:
@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
}
实现PermissionEvaluator接口,使其成为Spring bean。然后在安全配置中启用它:
@Autowired
private PermissionEvaluator permissionEvaluator;
@Bean
public DefaultMethodSecurityExpressionHandler expressionHandler() {
DefaultMethodSecurityExpressionHandler handler = new DefaultMethodSecurityExpressionHandler();
handler.setPermissionEvaluator(permissionEvaluator);
return handler;
}
并且:
<global-method-security pre-post-annotations="enabled">
<expression-handler ref="expressionHandler" />
</global-method-security>