我遇到了Waffle和Kerberos的问题。
我有Java Servlet应用程序,它可以在Tomcat上运行,并且在我使用waffle的Kerberos上有SSO。
要使SSO工作,我必须启用:
<init-param>
<param-name>impersonate</param-name>
<param-value>true</param-value>
</init-param>
当我将模拟设置为false时,SSO不起作用:(
一切似乎都运行正常,用户可以使用SSO登录我的应用程序。
但后来我发现冒充更改tomcat用户和应用程序不是在管理权限下工作,而是作为userA或userB。 因此,当userA在我的系统中创建文件(报告,日志,配置文件)时,他是文件的所有者,然后当用户B登录并尝试访问此文件时,我获得访问被拒绝异常。
我使用以下代码创建文件:
File file = new File(fileName);
file.createNewFile();
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
我希望在不更改用户的情况下进行应用程序工作,它应该是tomcat用户创建,读取和追加文件(Administrator)而不是userA或userB。
我需要带有华夫饼干的Kerberos SSO,但我不希望这种冒充方式如此。 还有其他方法让华夫饼干工作吗?或者也许我可以用其他任何方式保存文件?
答案 0 :(得分:0)
好的,我自己找到了解决方案。
通过模拟,我正在从
中读取登录用户serverContext.getIdentity().getFqn();
通过模拟,我在那里读取了正确的登录用户,但是当我关闭模拟时,我来到这里tomcat用户(NT AUTHORITY \ SYSTEM)而不是登录用户。
现在我正在从
中读取用户request.getUserPrincipal().getName();
关闭模仿,这对我有用。