电信系统接口WebService安全性之我见(二) 利用Servlet配置Web服务的安全访问

不管Axis部署在哪种服务器上(Tomcat还是Websphere),它总是以Servlet方式来运行的。所以最简单实现Web服务安全就是通过在Web应用的配置文件(web.xml)来实现访问控制。
J2EE web应用中有多种认证方式:BASIC(基本认证方法)、FORM(基于表单)、DIGEST(消息摘要)和CLIENT-CERT(数字证书)。此处只说明最基本的认证方式。例如在Tomcat配置如下:
1. 首先在Tomcat角色配置文件中增加一个角色和一个帐号。在tomcat-users.xml中增加角色(Tomcat_Home\conf\tomcat-users.xml)。
<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
… 
<role rolename="department-manager"/>
  <user username="admin" password="simplewebservices" roles="department-manager"/>

</tomcat-users>
2.添加了一个department-manager角色,并在此角色中添加了一个名为hellking的用户。要使tomcat-users.xml中配置的角色和用户生效,需要配置tomcat使用UserDatabaseRealm。打开Tomcat_Home\conf\server.xml配置文件,在GlobalNamingResources中添加以下描述:

<GlobalNamingResources>
  <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved">
    </Resource>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
  </GlobalNamingResources>
2. 再web应用的部署描述符中指定Web服务资源的访问控制,如下所示:


<security-constraint>
  <web-resource-collection>
    <web-resource-name>Tax Web service </web-resource-name>
  <url-pattern>/services/PersonalTaxService</url-pattern>
  </web-resource-collection>
  <auth-constraint>
    <role-name>department-manager</role-name>
  </auth-constraint>
</security-constraint>
<login-config>
  <auth-method>BASIC</auth-method>
  <realm-name>Axis Basic Authentication Area</realm-name>
</login-config>
<security-role>
  <role-name>department-manager</role-name>
</security-role>
url-pattern指定了需要通过角色验证的URL样式,在这里是"/services/PersonalTaxService";role-name是能够访问制定URL的角色,这里是department-manager。以上配置的意思是只有角色类型是"department-manager"的用户才能访问URL样式为"/services/PersonalTaxService"Web服务。
3. Axis客户端的编写。
call.getMessageContext().setUsername("hellking");//设置用户名
call.getMessageContext().setPassword("simplewebservices");//设置密码

你可能感兴趣的:(Web,应用服务器,servlet,webservice,电信)