我正在寻找一种方法来强制客户端在尝试检索我的WSDL
文件时使用 HTTP 基本身份验证。使用JAX-WS
我创建了以下 Web 服务,我使用 GlassFish 3:
@WebService(serviceName = "Hello")
@Stateless
public class HelloService {
@WebMethod(operationName = "sayHello")
@RolesAllowed("myrole")
public String sayHello(@WebParam(name = "name") @XmlElement(required=true) String name){
return "Hello "+name;
}
}
在谷歌搜索之后,似乎向web.xml
描述符添加安全约束应该可以解决这个问题,所以我做了
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<security-constraint>
<display-name>HelloSC</display-name>
<web-resource-collection>
<web-resource-name>HelloRC</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
<http-method>HEAD</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>myrole</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>file</realm-name>
</login-config>
现在,当我部署并将浏览器指向 http:// myserver
/Hello 时,浏览器会要求提供凭据。此外,该sayHello
方法只能使用正确的凭据使用。
问题:到目前为止一切顺利,但如果我将浏览器指向 WSDL (http:/// myserver
Hello/HelloService?wsdl),则不会要求我提供凭据,它只是加载,并且要求它应该受密码保护
我的理解是 url 模式也应该适用于 WSDL。毕竟这是一个 GET 请求......
任何指针?
编辑:所以我将 .war 部署到 JBoss 实例,它按预期工作。似乎 GlassFish 缺少一些配置。