有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java简单文件浏览器权限

在web项目中,我们有一个简单的文件浏览器。为了安全起见,我们需要某种映射,即哪些用户角色可以在哪些目录(包括其子目录)中读取(R)或读取+写入(RW)

示例:

具有roleA的UserA可以在folderA中查看文件/

  • roleA,“folderA/”,R

具有角色的UserB在folderA/中查看和编辑文件,以及查看folderB/

  • roleB,“folderA/”,RW
  • roleB,“folderB/”,R

到目前为止,项目中使用的一些技术:

  • 挂毯
  • 冬眠
  • Spring安全性(目前仅用于用户和角色)

我一直在深入研究Spring安全性,但不确定是否可以为我的用例使用GrantedAuthority实现(权限)

所以我的问题是,是否有人有Spring Security的经验,可以为我指出正确的方法。如果SpringSecurity无法实现,其他库方案也会受到欢迎,但我当然更喜欢使用已经在使用的库


共 (1) 个答案

  1. # 1 楼答案

    使用带有一些自定义代码的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接口,使其成为Springbean。然后在安全配置中使用以下命令启用它:

    @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>