我使用Maven插件(org.codehaus.mojo
> axistools-maven-plugin
)+ WSDL文件来生成Soap Web服务。
target / generated-source / wsdl2java / com.comp.proj中生成的文件是:
在我的项目中,我在一个具有相同名称的包中创建FooSoapBindingImpl.java
+在此java实现中添加我的自定义代码。
此Web服务已准备好用于生产。
所以,今天我在我的客户端添加基本身份验证(header => Authorization:Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ ==)
如何在我的Axis Web服务中添加对此基本身份验证的检查?
“Axis security section 'Authenticating the caller'”提到:
客户端可以使用客户端证书或HTTP基本身份验证进行身份验证。 后者太弱而无法在非加密通道上信任,但可以通过HTTPS工作。
当SOAP消息发布到端点时,
MessageContext
类将配置发送方的用户名和密码; *
使用适当的getter来查看这些值。请注意,Axis尚未与servlet API身份验证功能集成。
如何在我的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类中验证用户名和密码。