Windows下OpenLDAP的安装及使用(二)

下面讲述 Tomcat 和 OpenLDAP 配置,限制用户访问

1.Tomcat 服务器配置

每一个应用可以在各自的 <Context> 元素中配置自己的 Realm; 这个 realm 仅仅是对该应用是有效的. 然而, realm 也能配置到 <Engine> 或 <Host> 级别上. 它们对 realm 的行为和范围有影响. 这样允许一个 realm 很容易的在多个应用间共享.

这里有一个 server.xml 的realm, 它允许应用连接到 OpenLDAP.

<RealmclassName="org.apache.catalina.realm.JNDIRealm"

   debug="99"

   connectionName="cn=Manager,dc=mycompany,dc=com"

   connectionPassword="secret"

   connectionURL="ldap://localhost:389"

   roleBase="ou=roles,dc=mycompany,dc=com"

   roleName="cn"

   roleSearch="(uniqueMember={0})"

   roleSubtree="false"

   userSearch="(uid={0})"

    userPassword="userPassword"

   userPattern="uid={0},ou=people,dc=mycompany,dc=com"

/>

使用方法:在D盘建立一个文件夹用于存放相应的文件比如:D:\LDAPTest

          将Tomcat文件包放入该文件目录D:\LDAPTest\apache-tomcat-6.0.30

          更改D:\LDAPTest\apache-tomcat-6.0.30\conf目录下server.xml

          将以上代码加入到 <Enginename="Catalina" defaultHost="localhost">  下面。     

2.Web 应用配置

要完成 Tomcat 对 OpenLDAP 的配置, 应用的 web.xml文件必须更新的. 提供下载的应用中有 6 个 JSP 页面组成, 其中三个是针对LDAP 目录中设置的不同角色的受保护资源. 应用必须配置为允许基于 form 的验证,并被告知存在着哪些角色. 首先, 创建一个login.jsp 文件. 当使用基于 form 的验证时, 这个 JSP 必须包含如下内容.

<body>

    <formmethod="POST" action="j_security_check">

        <inputtype="text" name="j_username">

        <br>

        <inputtype="password" name="j_password">

        <br>

        <inputtype="submit">

    </form>

</body>

必须参考新的 OpenLDAP realm 来更新web.xml 文件, 并在其中使用 LDAP 指定的角色. 应用还需要让对login.jsp 页面的访问权限是公开的; 不然的话, 没有用户能登陆.

要告知应用什么角色能访问什么资源, 就要在应用 (或安全约束) 中用到 URL 映射. 这种映射既可以是一个文件名 (/admin.jsp) 也可以是一个路径 (/jsp/* 将保护jsp 目录中的任何东西). 下面的 XML 表示列出的这两个.jsp 文件不受到保护.

<security-constraint>

   <web-resource-collection>

       <web-resource-name>Public Area</web-resource-name>

        <!--Define the context-relative URL(s) to be protected -->

       <url-pattern>/index.jsp</url-pattern>

       <url-pattern>/login.jsp</url-pattern>

    </web-resource-collection>

</security-constraint>

为什么这个代码会标记其他的 .jsp 文件为不受保护呢? 这是由于未列出的不受保护, 而非列出来的才不受保护. 下面的 web.xml 片断标明了 user.jsp 资源是受保护的, 并指定了什么角色可访问它.

<security-constraint>

   <web-resource-collection>

       <web-resource-name>Protected Area</web-resource-name>

        <!--Define the context-relative URL(s) to be protected -->

       <url-pattern>/user.jsp</url-pattern>

   </web-resource-collection>

   <auth-constraint>

    <!-- Anyonewith one of the listed roles may access this area -->

        <role-name>TestUsers</role-name>

       <role-name>Special Users</role-name>

       <role-name>Admin Users</role-name>

    </auth-constraint>

</security-constraint>

注意到那个受保护资源有还有另一个节点配置, <auth-constraint>, 它指定了什么应用角色可以访问上面的资源. 假如存在 <auth-constraint> 配置, 资源就会是安全的. 否则, 它们就是公开的. 除非整个应用都是受保护的 (例如, <url-pattern>/</url-pattern>), 公开的权限约束完全是多余.

欲配置 web.xml 文件利用前面创建的 login.jsp , 要添加下面的代码到 web.xml 文件中.

<!--  usesform-based authentication -->

<login-config>

   <auth-method>FORM</auth-method>

   <form-login-config>

       <form-login-page>/login.jsp</form-login-page>

       <form-error-page>/fail_login.html</form-error-page>

   </form-login-config>

</login-config>

最后是对 web.xml 的一个附加配置步骤: 应用需要被知会我们要用到哪些角色.

<!-- Security roles referenced by this web application-->

<security-role>

   <role-name>Test Users</role-name>

</security-role>

<security-role>

   <role-name>Special Users</role-name>

</security-role>

<security-role>

   <role-name>Admin Users</role-name>

</security-role>

现在 Tomcat 已被配置为使用 OpenLDAP 并且我们的应用也对 web.xml 文件进行了正确的设置. 当用户首次被导航到 <security-constraint> 中列出的任何资源时 (只要不是公开的资源) , 服务器会自动显示login.jsp 页面要求用户验证. 假如用户验证失败,将会显示在 <form-error-page> 中指定的页面. 要是验证用户是通过了, 但是未授权访问某个资源 (比如, 不是某个角色的成员), 服务器会返回一个 403 错误页. 想要的话, 错误页可以在web.xml 文件中定制, 使用<error-code> 元素.

注,web.xml 中的元素有一个特定的顺序 (定义在 DTD 文件中), 所以你应该看看例子代码 中完整的web.xml文件. 尤其是 <login-config> 和 <security-role> 中的元素顺序.

现在用户可以登陆了, 但是该如何登出呢? 可以写代码来让用户的会话失效, 或者我们可以使用 Apache Jakarta 项目提供的便利的会话标签库.

3.Jakarta 相应标签库

通过加入 logout.jsp 到应用中并使用 Apache Jakarta Project 的会话标签库 , 我们能在不写任何定制代码情况下就失效掉的用户 (在实际的应用中, 你也许还需为清除一个用户会话做更多一些事情, 你也可能不怎么满意这么做).

<body>

   <sess:invalidate/>

    You are nowlogged out<br>

    <ahref="index.jsp">Return to index</a>

</body>

一旦包含用 <sess:invalidate/> 标签的 JSP 页面显示之后, 用户会话便被移除, 该用户被有效的注销掉了. 简单的放置一个链接指向logout.jsp 页面, 就能让用户导航该页, 这足以应付简单的应用. 另, 除会话标签库外, 我们还能利用 request 标签库来定制化基于用户和角色 JSP 页面的内容.

<req:isUserInRole role="Admin Users">

    The remote useris in role "Admin Users".<br />

</req:isUserInRole>

前述的 JSP 片断只有在当前用户在请求的角色中时才显示内容. 要验证角色安全性的行为, 可以用 JXplorer 快速的从角色中添加和移除用户.

4.使用web应该测试权限

 方法:将配置好的ldap应用放入D:\LDAPTest\apache-tomcat-6.0.30\webapps

    目录下。并启动Tomcat服务。

   在地址栏输入:http://localhost:8080/ldap/index.jsp

Windows下OpenLDAP的安装及使用(二)_第1张图片


以上就是关于访问权限的配置,有一部分还是借鉴了别人的,如有不足之处,还请批评改正。谢谢~


你可能感兴趣的:(tomcat,jsp,windows,Security,服务器,Authentication)