我在使用Waffle和Kerberos时有以下问题:
我有一个Java Servlet应用程序,它在Tomcat上工作,并且在Kerberos上有SSO,我使用的是waffle。
要使SSO工作,我必须启用:
<init-param>
<param-name>impersonate</param-name>
<param-value>true</param-value>
</init-param>
当我将impersonate设置为false时,SSO不起作用:(
一切似乎都很好,用户可以通过SSO登录到我的应用程序。
但是后来我发现impersonate更改tomcat用户和应用程序不是在管理权限下工作,而是作为userA或userB。因此,当userA在我的系统中创建文件(报告,日志,配置文件)时,他是文件的所有者,然后当userB登录并试图访问此文件时,我得到访问拒绝异常。
我用以下代码创建文件:
File file = new File(fileName);
file.createNewFile();
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
我想应用程序工作不改变用户,它应该tomcat用户创建,读取和追加文件(管理员)不是userA或userB。
我需要带有waffle的Kerberos SSO,但我不希望这种模拟以这种方式工作。还有别的办法让华夫饼好吃吗?或者我可以用其他方式保存文件?
好吧,我自己找到解决办法了。
使用impersonate从
读取已登录的用户serverContext.getIdentity().getFqn();
使用impersonate,我读取正确的登录用户,但当我关闭impersonate时,我得到这里的tomcat用户(NT AUTHORITYSYSTEM)而不是登录用户。
现在我从
读取userrequest.getUserPrincipal().getName();
与impersonate关闭,这对我工作