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

问题描述 投票:6回答:3

我使用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服务中添加对此基本身份验证的检查?

java maven soap axis basic-authentication
3个回答
0
投票

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

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

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

an example here

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

看到getter example in this answer


0
投票

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

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

WebServiceContext

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


0
投票

最简单的方法是在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类中验证用户名和密码。

© www.soinside.com 2019 - 2024. All rights reserved.