您可以限制对RPC风格的Web服务的访问,具体方法是限制对实现Web服务或SOAP servlet的无状态会话EJB的访问。清单2和3显示了如何设置web.xml和weblogic.xml文件以保护SOAP servlet。确保客户端仍然能够访问WSDL文件。为了确保这一点,应避免使用通配符映射;而是显式地保护SOAP servlet适配器路径。这两个清单提供了一个如何保护帐户管理程序代理Web服务的例子。正如您所看到的那样,角色是在web.xml中定义的,并与域中的组相关联。
清单2
<security-constraint>
<web-resource-collection>
<web-resource-name> Weather</web-resource-name>
<url-pattern>/weatherturi/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
<security-role>
<role-name>Admin</role-name>
</security-role>
清单3
<security-role-assignment>
<role-name>Admin</role-name>
<principal-name>system</principal-name>
</security-role-assignment>
Web 服务客户端
为了理解如何处理Web服务客户端的安全性问题,必须要理解SOAP和HTTP身份验证的工作方式。
SOAP身份验证
Web服务使用SOAP协议,它是以一些底层传输机制为基础而实现的高级消息传送协议。Web服务安全性仍然是一个新兴领域,围绕SOAP规范出现了一些扩展,以支持安全功能。当前,SOAP使用的是针对身份验证的底层传输协议基础架构。所以,WebLogic Server SOAP间接地使用了HTTP 1.1身份验证。
HTTP身份验证
使用HTTP的用户身份验证方法十分简单。因为HTTP是一个无状态协议--也就是说,一旦请求完成之后,服务器不会记住关于该请求的任何信息--浏览器需要为每个请求重新发送用户名和密码(参见图1)。

第一次访问需验证的资源时,服务器将返回401状态(“Unauthorized”),并包括一个WWW身份验证的响应头,用于指明所使用的域名和身份验证模式。然后,浏览器应该要求用户输入用户名和密码。接着,它再次请求同样的资源,这次包括了一个含有模式名(“Basic”)的身份验证头,以及输入的用户名和密码。服务器检查此用户名和密码,如果它们是有效的,就会返回相应的页面。如果密码对于该用户无效,或者用户没有访问权限,服务器还会像以前一样返回401状态。然后,浏览器可以要求用户尝试重新输入用户名和密码。
假定用户名和密码有效,接下来用户可能会请求一个受保护的资源。在这种情况下,服务器将使用401状态作为响应,而浏览器能够使用用户和密码详细信息再次发送请求。这样做会很慢,然而对于随后的请求,浏览器就会改为发送身份验证头。