我想通过tomcat使用我的ldap中的组来进行身份验证来处理对我的webapp的访问(例如:管理员,简单用户,开发人员等)。 如果我不使用任何类型的组,我现在可以使用ldap登录我的webapp。
以下是我的相关代码示例:
web.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&amp; admin.html。
目前所有人(无论他们的团体)都可以访问该页面中的定义,但没有人可以访问blabla.jsp&amp; admin.html。
server.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”中有一个groupe,并且我根据如何将已定义的组定义为ldap来定义rolebase / search / subtree / name。 我登录到我的webapp,他在ldap中有以下属性:
memberOf CN=TOTOAdmins,OU=ABC,DC=ABCDEF,DC=xyz
(他甚至是四个不同群体的成员,但我不知道它是否相关)
我不知道它是否会有所帮助,但在主页上我有
<h1><% =request.getUserPrincipal()%></h1>
当我与用户一起登录时:toto,它会打印:
的GenericPrincipal [TOTO(CN =管理员,OU = ABC,DC = ABCDEF,DC = XYZ,的 CN = TOTOAdmins 下,OU = ABC,DC = ABCDEF,DC = XYZ,CN =读者CN = ABC,DC = ABCDEF,DC = XYZ,CN =用户,CN =角色,DC = ABCDEF,DC = XYZ)
嗯,你是我最后的机会。
答案 0 :(得分:0)
尝试将属性 roleSearch 更改为
"(member={0})"
或
"(memberOf={0})"