我有使用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+我也对此感兴趣)。
谢谢!
感谢您的回应。如果你按照我给你的链接,你会看到这是建议。我尝试了这一点,它可以在远程用户可用的地方工作,但是角色对用户不可用。我试图解决这个问题。有任何想法吗? – rjcarr 2014-11-06 14:18:10
您必须自己提取角色; httpd无法提供它们。您可能希望编写一个'过滤器'来抓取'REMOTE_USER'作为一个可信任的身份,然后从其存储的任何地方(例如RDBMS,LDAP等)加载角色并包装请求,以便request.isUserInRole'然后适用于您的应用程序。如果你需要使用容器管理的授权,你需要一个'Valve'而不是'Filter',因为Tomcat的授权检查在任何'Filter'被调用之前发生。 – 2014-11-06 14:49:09
@Christopher_Schultz:谢谢你的回应,这使得更有意义。你有没有机会就如何做到这一点有任何指导,或者我应该参考tomcat文档? – rjcarr 2014-11-10 18:21:38