我尝试使用spring security来保护我的osgi服务和web应用程序,intercept-url工作正常,但全局方法安全性根本不起作用。对于纯OSGI包,代理模式不起作用,因为spring-beans无法访问SpringProxy。我尝试了代理模式和aspectj模式,并在aspectj模式下启用了加载时间编织,捆绑包已成功加载。但Preauthorized不起作用(在xml配置中添加了pre-post-annotations =“enabled”),并且在接口和实现上添加了注释,但它仍然不起作用。
我不知道保护bean方法的spring security的机制。有人可以给我一些提示吗?谢谢!
答案 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);