使用Spring集成的数据和/或消息源端身份验证



学习Spring集成安全性,尽管我认为我理解如何锁定通道,使它们安全并强制认证/授权,但这只是通道端;集成。例如:

@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服务器上的文件如何"验证"?本身和集成流?如果一个普通(非管理员)用户在FTP服务器上放置了一个文件,而这个文件只应该由(比方说)管理员用户放置和执行,该怎么办?换句话说:对于ADMIN/PRESIDENT角色,这里实际要评估的用户/主体是什么?当从FTP服务器读取文件时,这里使用的是什么用户,身份验证是如何工作的?

我想我从根本上误解了一些事情……我只是不知道那是什么!谢谢你的帮助/澄清。

它不是这样工作的:您的系统有一个FTP专用用户,并且在配置该ftpSessionFactory时使用其凭据。该特定用户被FTP服务器视为主体。它与系统中的角色和用户无关。为了更好的安全边界,它必须不知道应用程序中的用户服务。这与你连接数据库时得到的完全相似:你使用一些连接URL和一些用户&密码。这里有哪些"管理/总裁"角色?

?

"当从DB读取表时,这里使用的是哪个用户,身份验证是如何工作的?">

您可以在应用程序中为此轮询操作初始化一些人工主体。关键是源轮询通道适配器是由应用程序调度系统启动的。在您的安全配置中,没有任何终端用户可以与principal关联。

最新更新