如何在Apache Axis Web Service(SOAP)中添加基本身份验证?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Apache Axis Web Service(SOAP)中添加基本身份验证?相关的知识,希望对你有一定的参考价值。

我使用Maven插件(org.codehaus.mojo> axistools-maven-plugin)+ WSDL文件来生成Soap Web服务。

target / generated-source / wsdl2java / com.comp.proj中生成的文件是:

  • Foo.java(java界面)
  • foo service locator.Java
  • FooSoapBindingImpl.java(java空实现)
  • foo SOAP binding skeleton.Java
  • foo SOAP bindings图标.Java

在我的项目中,我在一个具有相同名称的包中创建FooSoapBindingImpl.java +在此java实现中添加我的自定义代码。

此Web服务已准备好用于生产。

所以,今天我在我的客户端添加基本身份验证(header => Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ ==)

如何在我的Axis Web服务中添加对此基本身份验证的检查?

答案

Axis security section 'Authenticating the caller'”提到:

客户端可以使用客户端证书或HTTP基本身份验证进行身份验证。 后者太弱而无法在非加密通道上信任,但可以通过HTTPS工作。

当SOAP消息发布到端点时,MessageContext类将配置发送方的用户名和密码; *

an example here

使用适当的getter来查看这些值。请注意,Axis尚未与servlet API身份验证功能集成。

看到getter example in this answer

另一答案

如何在我的Axis Web服务中添加对此基本身份验证的检查?

答:可以从qazxsw poi检索基本凭据

WebServiceContext

上面的代码解释了如何从Web服务中检索基本凭据。我的建议是让Servlet或EJB容器处理您的应用程序所需的任何安全性。通过让容器处理您的安全性,您的代码在环境之间变得更加可移植。

另一答案

最简单的方法是在WSDL中添加SOAP标头以进行身份​​验证。例如,用户名和密码可以作为新元素添加到WSDL文件中的新SOAP标头下,并重新生成源文件。

@WebService
public class Service{
//Injected by whatever container you are using
@Resource
WebServiceContext wctx;

@WebMethod
public Integer fooServiceLocator(int x, int y){
    //Get The Message Context
    MessageContext mctx = wctx.getMessageContext();

    //Grab the HTTP Request Headers
    Map<Object, Object> object = (Map<Object, Object>) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);

    //Grab the Authorization Values
    List<String> basicCredentials = (List<String>) object.get("Authorization");

    //Print out credentials
    basicCredentials.forEach(System.out::println);

    //Do a meaningful check of the credentials

在WSDL中使用上面的头文件,如果我们生成源文件,我们可以轻松地在impl中添加身份验证逻辑。

然后可以在* Impl.java类中验证用户名和密码。

以上是关于如何在Apache Axis Web Service(SOAP)中添加基本身份验证?的主要内容,如果未能解决你的问题,请参考以下文章

2.4 Apache Axis2 快速学习手册之XMLBeans 构建Web Service

WCF:Svcutil 生成无效的客户端代理、Apache AXIS Web 服务、重载操作

java如何调用webservice接口

Web服务框架发展与REST服务开发

javaWeb工程如何发布到网络上 用啥web服务器

如何使用 Apache Axis2 和 WSDL2Java 向 SOAP 响应添加命名空间引用