posts - 2,  comments - 0,  trackbacks - 0
  2008年12月26日

TOMCAT 中的访问控制策略

TOMCAT的安全控制策略是根据Servlet 2.4规范来实现的。

1.在$CATALINA/conf/server.xml文件中配置:

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"  debug="0" resourceName="UserDatabase"/>

这里UserDatabase是一个jndi的名称,也需要在server.xml中配置,对应于$CATALINA/conf/tomcat-users.xml文件

2.tomcat-users.xml文件里面定义了用户和角色

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="manager" password="tomcat" roles="manager"/>
  <user username="admin" password="tomcat" roles="admin"/>
</tomcat-users>

3.在相应的应用的web.xml文件中加入<security-constraint><login-config> <security-role>标签,如下所示:
  <!-- Security is active on entire directory -->
  <security-constraint>
    <display-name>Tomcat Server Configuration Security Constraint</display-name>
    <web-resource-collection>
      <web-resource-name>Protected Area</web-resource-name>
      <!-- Define the context-relative URL(s) to be protected -->
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <!-- Anyone with one of the listed roles may access this area -->
      <role-name>admin</role-name>
    </auth-constraint>
  </security-constraint>

  <!-- Login configuration uses form-based authentication -->
  <login-config>
    <auth-method>FORM</auth-method>
    <realm-name>Tomcat Server Configuration Form-Based Authentication Area</realm-name>
    <form-login-config>
      <form-login-page>/login.jsp</form-login-page>
      <form-error-page>/error.jsp</form-error-page>
    </form-login-config>
  </login-config>

  <!-- Security roles referenced by this web application -->
  <security-role>
    <description>
      The role that is required to log in to the Administration Application
    </description>
    <role-name>admin</role-name>
  </security-role>

4.在 <login-config>标签的<auth-method>FORM</auth-method>属性中,可以看到这里的authentication method 设置为FORM,这是一种基于表单的用户认证方式。基于form的用户认证需要在<form-login-page>/login.jsp</form-login-page>定义的登陆页面中提供一个包括用户名和密码的html表单,这个表单相对应于用户名和密码的元素必须是j_username和j_password,并且表单的ACTION必须为j_security_check。譬如: 
<form method="POST" action="j_security_chack"> 
<input type="text" name="j_username"> 
<input type="password" name="j_password"> 
</form> 

在验证通过之后,login页面会自动转向该应用的默认页面(index.html,index.jsp等等)。

除了FORM验证方式之外,还有BASIC和CLIENT-CERT这两种用户认证方式,前者是基本的用户认证方式,要求浏览器弹出一个对话框,录入用户名和密码。后者是使用客户数字证书来认证请求。

5.以上四步完成之后便可以通过在tomcat-users.xml文件中添加用户和角色来实现访问控制了。还是比较方面的。

posted @ 2008-12-26 17:17 sunnyiric 阅读(1484) | 评论 (0)编辑 收藏