tomcat - Java EE : authentification through tomcat+ldap

标签 tomcat ldap

我想通过 tomcat 使用我的 ldap 中的组进行身份验证来处理对我的 web 应用程序的访问(例如:管理员、简单用户、开发人员等)。 如果我不使用任何类型的组,我现在可以使用 ldap 登录我的网络应用程序。

这是我的相关代码示例:

网络.xml :

<security-constraint>
    <display-name>Test</display-name>
    <web-resource-collection>
        <web-resource-name>Administrative Area</web-resource-name>
        <url-pattern>/admin.html</url-pattern>
        <url-pattern>/blabla.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>TOTOAdmins</role-name>
    </auth-constraint>
</security-constraint>
<security-constraint>
    <display-name>Tomcat Server Configuration Security Constraint</display-name>
    <web-resource-collection>
        <web-resource-name>Protected Area</web-resource-name>
        <url-pattern>/users/*</url-pattern>
        <url-pattern>/login</url-pattern>
        <url-pattern>/error</url-pattern>
        <url-pattern>/welcome</url-pattern>
        <url-pattern>/home.do</url-pattern>
        <url-pattern>/out.do</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>
</security-constraint>
<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Form-Based Authentication </realm-name>
    <form-login-config>
        <form-login-page>/login</form-login-page>
        <form-error-page>/error</form-error-page>
    </form-login-config>
</login-config>
<security-role>
    <role-name>TOTOAdmins</role-name>
</security-role>
<security-role>
    <role-name>*</role-name>
</security-role>
<welcome-file-list>
    <welcome-file>welcome</welcome-file>
</welcome-file-list>

我们可以在这个示例中看到,我想向所有用户授予对某些页面的访问权限,但只有属于 TOTOAdmins 的用户才能访问 blabla.jsp 和 admin.html。

目前所有人(无论他们的组)都可以访问 中定义的页面,但没有人可以访问 blabla.jsp 和 admin.html。

服务器.xml :

  <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            <Context path="/portal_re" debug="0" reloadable="true" docBase="portal_re">
      <Realm className="org.apache.catalina.realm.JNDIRealm"
               debug="99"
               connectionURL="ldap://XX.X.XX.XXX:XXX"
               connectionName="cn=XXXXXX,ou=abc,dc=abcdef,dc=xyz"
               connectionPassword="XXXXXXX"
               userBase="ou=abc,dc=abcdef,dc=xyz"
               userSearch="(name={0})"
               userSubtree="true"
               userRoleName="memberOf"
               roleBase="ou=abc,dc=abcdef,dc=xyz"
               roleSearch="(uniqueMember={0})"
               roleSubtree="true"
               roleName="cn"
/>
</Context>

当我浏览我的 ldap 时,每个用户在成员“memberOf”中都有一个组,并且我根据如何将组定义到 ldap 来定义 rolebase/search/subtree/name。 我登录到我的 webapp,它在 ldap 中具有以下属性:

memberOf            CN=TOTOAdmins,OU=ABC,DC=ABCDEF,DC=xyz

(他甚至是四个不同组的成员,但我不知道这是否相关)

我不知道它是否有帮助,但在主页上我有

<h1><% =request.getUserPrincipal()%></h1>

当我用用户登录时:toto,它打印:

GenericPrincipal[toto(CN=Administrators,OU=ABC,DC=ABCDEF,DC=xyz,CN=TOTOAdmins,OU=ABC,DC=ABCDEF,DC=xyz,CN=Readers,CN=ABC,DC=ABCDEF,DC=xyz,CN=Users,CN=Roles,DC=ABCDEF,DC=xyz,)

好吧,你是我最后的机会。

最佳答案

尝试将属性 roleSearch 更改为

"(member={0})"

"(memberOf={0})"

关于tomcat - Java EE : authentification through tomcat+ldap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736675/

相关文章:

java - 在tomcat上设置一个servlet

linux - Tomcat:无法从局域网上的其他计算机连接

c# - 更改为 Comcast 后的 ActiveDirectoryMembershipProvider "The specified domain or server could not be contacted"

java - 如何设置一个 Servlet 作为 Java 主页运行?

tomcat - 如何从 Servlet 中以编程方式检测 Tomcat 启动?

java - 如何使用 Java 删除 Active Directory 中的用户

超出 LDAPException 大小限制

ldap - 如何在 LDAP 中使用同一电子邮件地址创建多个联系人?

ldap - CAS LDAP 搜索子树

java - Tomcat 6.0 不在本地主机上基于 webkit 的浏览器中设置 Cookie