Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为Tomcat 9创建自定义HTTP身份验证程序_Java_Tomcat_Http Headers_Tomcat Valve_Tivoli Identity Manager - Fatal编程技术网

Java 为Tomcat 9创建自定义HTTP身份验证程序

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,以便在我的应用程序的

我需要将IBM安全访问管理器与Tomcat 9集成以验证用户。我有一个针对IBMSAM部件的正确配置的Webseal(连接)。它获取用户的凭据,再次验证SAM服务器,如果成功,则在传递头
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邮件列表,你可能会得到更多的关注。当然,一旦我在这些基本步骤上取得了一些重大进展,如果需要的话,我可能会创建一个单独的问题。因此,我编写了一个验证器,但它会导致我的服务器无法启动,我不确定原因。我已将问题发布到。我有点卡住了从这里怎么办