Spring安全性全局方法安全性在OSGI环境中不起作用

时间:2015-04-18 13:39:35

标签: methods spring-security osgi bundle protected

我尝试使用spring security来保护我的osgi服务和web应用程序,intercept-url工作正常,但全局方法安全性根本不起作用。对于纯OSGI包,代理模式不起作用,因为spring-beans无法访问SpringProxy。我尝试了代理模式和aspectj模式,并在aspectj模式下启用了加载时间编织,捆绑包已成功加载。但Preauthorized不起作用(在xml配置中添加了pre-post-annotations =“enabled”),并且在接口和实现上添加了注释,但它仍然不起作用。

我不知道保护bean方法的spring security的机制。有人可以给我一些提示吗?谢谢!

2 个答案:

答案 0 :(得分:0)

找到原因,默认上下文:component-scan不会为生成的bean生成代理。

  <context:component-scan base-package="org.ops4j.pax.web.samples.spring.service" scoped-proxy="targetClass/interfaces" />

答案 1 :(得分:0)

当组件扫描OsgiBundleResourcePatternResolver中定义的搜索类时,spring-osgi-io中存在错误,真的很难过。类路径从头开始删除,因此在步骤2中,它搜索包根文件夹,而不是类路径

//消除类路径路径         final String path = OsgiResourceUtils.stripPrefix(locationPattern);

    final Collection foundPaths = new LinkedHashSet();

    // 1. search the imported packages

    // find folder path matching 
    final String rootDirPath = determineFolderPattern(path);

    if (System.getSecurityManager() != null) {
        AccessController.doPrivileged(new PrivilegedAction() {

            public Object run() {
                for (int i = 0; i < importedBundles.length; i++) {
                    final ImportedBundle importedBundle = importedBundles[i];
                    if (!bundle.equals(importedBundle.getBundle())) {
                        findImportedBundleMatchingResource(importedBundle, rootDirPath, path, foundPaths);
                    }
                }
                return null;
            }
        });
    }
    else {
        for (int i = 0; i < importedBundles.length; i++) {
            final ImportedBundle importedBundle = importedBundles[i];
            if (!bundle.equals(importedBundle.getBundle())) {
                findImportedBundleMatchingResource(importedBundle, rootDirPath, path, foundPaths);
            }
        }
    }

    // 2. search the target bundle
    findSyntheticClassPathMatchingResource(bundle, path, foundPaths);