Java 为Tomcat 9创建自定义HTTP身份验证程序
我需要将IBM安全访问管理器与Tomcat 9集成以验证用户。我有一个针对IBMSAM部件的正确配置的Webseal(连接)。它获取用户的凭据,再次验证SAM服务器,如果成功,则在传递头Java 为Tomcat 9创建自定义HTTP身份验证程序,java,tomcat,http-headers,tomcat-valve,tivoli-identity-manager,Java,Tomcat,Http Headers,Tomcat Valve,Tivoli Identity Manager,我需要将IBM安全访问管理器与Tomcat 9集成以验证用户。我有一个针对IBMSAM部件的正确配置的Webseal(连接)。它获取用户的凭据,再次验证SAM服务器,如果成功,则在传递头iv user、iv group和iv creds的同时重定向到Tomcat。我现在需要编写一个自定义Tomcat阀来实现身份验证,并允许基于用户组访问应用程序。这样做的最佳方式是什么 我目前的想法是扩展org.apache.catalina.valves.AuthenticatorBase,以便在我的应用程序的
iv user
、iv group
和iv creds
的同时重定向到Tomcat。我现在需要编写一个自定义Tomcat阀来实现身份验证,并允许基于用户组访问应用程序。这样做的最佳方式是什么
我目前的想法是扩展org.apache.catalina.valves.AuthenticatorBase
,以便在我的应用程序的web.xml
中使用以下设置:
<security-constraint>
<web-resource-collection>
<web-resource-name>Application</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>POST</http-method>
<http-method>GET</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>MyRoleName</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
应用
/*
邮递
得到
桃金娘胺
基本的
Webseal中的头可以被解析并用于生成org.apache.catalina.realm.GenericPrincipal
,然后用于验证添加到给定领域中的角色(或写入tomcat users.xml
)
我对如何实际实现这种身份验证有点不确定,因此无论有多基本,任何帮助都将不胜感激。最重要的是确保Tomcat不会安装自己的身份验证程序,以响应您将basic指定为身份验证方案的要求。从AuthenticatorBase进行扩展是一个好主意,您可以通过在应用程序的META-INF/context.xml文件中将验证器配置为a来避免Tomcat的标准验证器 接下来,您需要在
AuthenticatorBase
上实现两个方法:
boolean-doAuthenticate(请求-请求,HttpServletResponse-response)
String getAuthMethod()
“IBMSAM”
当然,第一个问题是验证器的核心所在
如果您可以从请求中获得所需的一切,那就太好了:它已经存在,因此您可以获得所需的一切。您的方法需要做两件事:
将请求的principal
设置为适当的值(例如request.setUserPrincipal(新的GenericPrincipal(用户名、null、角色));
返回true
我认为,一旦你能在一个简单的情况下使用它,你就可以从那里开始处理边缘案例。谢谢!这肯定有助于巩固我心中的过程。一个简单的问题,IBM有一个他们制造的阀门(它不适用于我的Tomcat版本)它允许addRoles
和enableStacktrace
功能在阀门中放置在server.xml
中。我是否可以通过在startInternal
方法中设置配置来模拟此功能?我不完全确定您在问什么。可能在新的SO问题中给出更长的解释。或者,加入Tomcat邮件列表,你可能会得到更多的关注。当然,一旦我在这些基本步骤上取得了一些重大进展,如果需要的话,我可能会创建一个单独的问题。因此,我编写了一个验证器,但它会导致我的服务器无法启动,我不确定原因。我已将问题发布到。我有点卡住了从这里怎么办