2014-11-06 126 views
0

我有使用ajp向tomcat发送apache转发请求。我在tomcat中的应用程序通过tomcat-users用户数据库使用基本身份验证。用户在那里列出,给予角色,并且一切都很好。使用AJP在Tomcat中模拟和/或启用单点登录

但是,我的用户使用身份证插入他们的工作站,通过唯一的号码标识他们。我不知道这个细节,但是apache和浏览器有一些模块能够自动识别用户,并且基本认证她,并且在Apache环境中REMOTE_USER可用。

不幸的是,REMOTE_USER在tomcat中不可用(通过request.getRemoteUser()),所以当用户访问我的tomcat应用程序时会提示用户登录。我发现这个线程:

Forward REMOTE_USER to tomcat via AJP (e.g. for shibboleth)

它描述了可以禁用Tomcat的认证,这使得在Tomcat中可用的REMOTE_USER,但由于我们已经停用tomcat的认证,也不再分配给任何角色用户。

要清楚,我已经添加了这个ID号到tomcat-用户,但它并不能帮助:

<user username="billg" password="pass" roles="ceo"/> 
<!-- billg's id number --> 
<user username="[email protected]" roles="ceo"/> 

我知道这是一个很独特的环境和要求,但没有任何人有经验做这样的工作?

FWIW:这是apache 2.2+和tomcat 6(但如果有解决方案的tomcat 7+我也对此感兴趣)。

谢谢!

回答

0

您想在您的server.xml的AJP <Connector>配置中设置tomcatAuthentication="false"

查看Tomcat's AJP Connector Configuration Guide仅供参考。

尽管我给出的参考文献是针对Tomcat 8的,但同样的技术也适用于Tomcat 7和Tomcat 6。但是你可以升级到Tomcat 8,因为它是稳定的,而且Tomcat 6目前处于维护模式,并且没有太多改进。

+0

感谢您的回应。如果你按照我给你的链接,你会看到这是建议。我尝试了这一点,它可以在远程用户可用的地方工作,但是角色对用户不可用。我试图解决这个问题。有任何想法吗? – rjcarr 2014-11-06 14:18:10

+0

您必须自己提取角色; httpd无法提供它们。您可能希望编写一个'过滤器'来抓取'REMOTE_USER'作为一个可信任的身份,然后从其存储的任何地方(例如RDBMS,LDAP等)加载角色并包装请求,以便request.isUserInRole'然后适用于您的应用程序。如果你需要使用容器管理的授权,你需要一个'Valve'而不是'Filter',因为Tomcat的授权检查在任何'Filter'被调用之前发生。 – 2014-11-06 14:49:09

+0

@Christopher_Schultz:谢谢你的回应,这使得更有意义。你有没有机会就如何做到这一点有任何指导,或者我应该参考tomcat文档? – rjcarr 2014-11-10 18:21:38