2

我对 Waffle 和 Kerberos 有以下问题。

我有可以在 Tomcat 上运行的 Java Servlet 应用程序,并且在我使用 waffle 的 Kerberos 上有 SSO。

为了使 SSO 工作,我必须启用:

  <init-param>
      <param-name>impersonate</param-name>
      <param-value>true</param-value>
  </init-param>

当我将 impersonate 设置为 false 时,SSO 不起作用:(

一切似乎都很好,用户可以使用 SSO 登录我的应用程序。

但后来我发现模拟更改 tomcat 用户和应用程序不是在管理权限下工作,而是作为 userA 或 userB。因此,当用户 A 在我的系统中创建文件(报告、日志、配置文件)时,他是文件的所有者,然后当用户 B 登录并尝试访问该文件时,我得到拒绝访问异常。

我使用以下代码创建文件:

File file = new File(fileName);
file.createNewFile();
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);

我希望应用程序在不更改用户的情况下工作,它应该是 tomcat 用户创建、读取和附加文件(管理员)而不是 userA 或 userB。

我需要带有华夫饼的 Kerberos SSO,但我不希望这种模拟以这种方式工作。有没有其他方法可以让华夫饼起作用?或者也许我可以以任何其他方式保存文件?

4

1 回答 1

0

好的,我自己找到了解决方案。

通过模拟,我正在阅读登录用户

serverContext.getIdentity().getFqn();

使用模拟时,我在那里读取了正确的登录用户,但是当我关闭模拟时,我得到了 tomcat 用户(NT AUTHORITY\SYSTEM)而不是登录用户。

现在我正在阅读用户

request.getUserPrincipal().getName();

模拟关闭,这对我有用。

于 2016-09-28T13:56:30.640 回答