MRS安全集群问题解决:配置了java.security.auth.login.config却还是加载不到jaas
今天用flink测试1个beam程序包, 里面要做1个认证的操作, 认证操作通过部门内部的认证组件包实现。
但是发现认证失败, 异常提示"jass DLFClient not exist"。 DlfClient是我们定义的一个module。
§ 分析过程
这显然是没正确加载到jaas文件, jaas文件里是有DLFClient这个moudle的:
用远程调式跟踪了下,发现认证前是有做配置java.security.auth.login.config,并把jaas文件的路径放入,jaas路径名也是正确的:
接着跟踪到了报异常的地方:
这里是调用了getConfiguration,取出里面的entry, 但是这里的entry是空的
看了下内容,没有DLFClient这个moudle,但configuration却包含了Client和KafkaClient:
再看了下里面Client的keytabPath内容,可以发现为我配置Flink客户端时的输入的login-context内容
也就是说,即使我配置了java.security.auth.login.config, 但依然没用, 我需要明白java.security.auth.login.config里所配置的文件是何时使用的。
重新走了一遍源代码,发现问题在于javax.security.auth.login.Configuration.getConfiguration()里,这是里面的源码:
可以看到如果confiuration不为null了,就不会更新configuartion了。
而Flink每次提交任务时,在进入自己写的main函数前,会先调用一次getConfiguration,导致后续不再更新getConfiguration。
§ 原因总结
如果出现"配置了java.security.auth.login.config却还是加载不到jaas文件内容的问题", 很可能是因为在set该Property之前, 已经有其他地方通过调用javax.security.auth.login.Configuration.getConfiguration(), 将config配置进行了更新,并使之后不再变化。
§ 解决方案:
尽量保证Client们来自同一份jass配置, 我通过在flink-conf.yaml中加入对应context解决。
- 点赞
- 收藏
- 关注作者
评论(0)