学习Spring Integration的安全性,尽管我 * 认为 * 我理解了如何锁定通道,使它们安全并强制认证/授权,但这只是“* 通道端 *”的集成。
@Bean
@GlobalChannelInterceptor(patterns = "secured*")
AuthorizationChannelInterceptor authorizationChannelInterceptor() {
return new AuthorizationChannelInterceptor(AuthorityAuthorizationManager.hasAnyRole("ADMIN", "PRESIDENT"));
}
太棒了!它会锁定频道,这样频道只会接收来自拥有正确权限的用户的消息。
但是“* 客户端 *”(发送端)怎么办?
假设我用下面的代码创建了一个IntegrationFlow
,它每5秒轮询一次FTP服务器以获取某个新文件:
@Bean
public IntegrationFlow ftpInboundFlow() {
return IntegrationFlow
.from(Ftp.inboundAdapter(this.ftpSessionFactory)
.preserveTimestamp(true)
.remoteDirectory("foo")
.regexFilter(".*\\.txt$")
.localFilename(f -> f.toUpperCase() + ".a")
.localDirectory(new File("d:\\ftp_files")),
e -> e.id("ftpInboundAdapter")
.autoStartup(true)
.poller(Pollers.fixedDelay(5000)))
.handle(...)
.get();
}
验证在哪里进行?FTP服务器上的 file 如何使用集成流“验证”自身?如果一个普通(非管理员)用户在该FTP服务器上放置了一个文件,而该文件只应由管理员用户放置和执行,该怎么办?换句话说:对于ADMIN
/PRESIDENT
角色,此处实际评估的是哪个用户/主体?从FTP服务器读取文件时,此处使用的是哪个用户,身份验证是如何工作的?
我想我从根本上误解了一些东西...我只是不知道那是什么!谢谢你的帮助/澄清。
1条答案
按热度按时间ngynwnxp1#
它不是这样工作的:您的系统有一个FTP专用用户,并且在配置
ftpSessionFactory
时使用其凭据。FTP服务器将此特定用户视为主体。它与系统中的角色和用户无关。为了获得更好的安全边界,它不能知道应用程序中的用户服务。这与连接到数据库时得到的结果完全相似:你使用了一些连接网址和一些用户名和密码。2这里的“管理员/总统角色”是什么?从DB读取表时,此处使用的是哪个用户,身份验证是如何工作的?
您可以在应用程序中为该轮询操作启动一些人工主体。关键是源轮询通道适配器是由应用程序调度系统启动的。只是没有任何最终用户与安全配置中的主体相关联。