Java RestEasy : Base64 encoded sign over REST

标签 java soap wsdl base64 resteasy

我在尝试验证用于 Web 服务登录的一对 token /符号时遇到问题。

WS 作为soap-wsdl 1.1 公开,但客户端需要通过react-native 应用程序使用它。经过几个小时的研究,我们(客户和我)最终得出的结论是,发布一个使用 wsdl 并将其公开为 Rest api 的 Rest 代理会更快。

WS 仅用于身份验证,包含两种方法:

+login(String: username, String: password): LoginResponse(String token, Base64Binary sign);

+verifyToken(String: token, Base64Binary: sign): Boolean;

用于 token 和签名验证的 wsdl 参数

<xs:sequence>
<xs:element minOccurs="0" name="token" type="xs:string"/>
<xs:element minOccurs="0" name="firma" type="xs:base64Binary"/>
</xs:sequence>

LoginResponse通过json发送,结构如下:

public class LoginResponse {

    private byte[] firma;
    private String token;

}

然后由 verifyToken 作为字符串接收:

@GET
@Path("/validarToken")
@Produces(MediaType.APPLICATION_JSON)
public Response verifyToken(@QueryParam("token") String token,
        @QueryParam("sign") String sign) {

}

然后,使用sign.getBytes()转换符号;

我注意到,当我调试由login()返回的byteArray时,该数组包含负数,但是当verifyToken接收并转换为字节时,没有表示负值(结果数组不相同) )。

尽管如此,如果我在使用 LoginResponse 登录后直接调用 verifyToken,它会正确验证,因此 verifyToken 方法可以正常工作。

谢谢。

最佳答案

由于我无法使用 Base64 到字符串转换来解决问题,因此我执行了以下操作:

- 将 Base64 字节数组转换为十六进制字符串 -verifyToken 现在接受十六进制字符串作为符号。 -将十六进制字符串符号转换回字节数组。

十六进制转换由: https://stackoverflow.com/a/5942951/2350854 提供。

关于Java RestEasy : Base64 encoded sign over REST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508502/

相关文章:

java - 如何从 WSDL 生成 Web 服务

javascript - 多个 Rhino (java) 线程操作同一个文件

java - 构造函数中的可重写方法调用 - 调用该方法的正确方法是什么?

php - 如何在 Magento SOAP 中使用两个日期范围过滤器

java - 生成 java 类时出现 wsdl2java 错误

ajax - 通过 WSDL 形成 SOAP 请求消息

java - DAO 可以使用本身封装了 dataSource 对象的对象吗?

java - 为什么程序运行时我的舞台没有反应? ( java 外汇)

php - fatal error : Uncaught SoapFault exception: [Client] SOAP-ERROR: Encoding: string '\xa3...' is not a valid utf-8 string

java - IRS ACA 1095C SOAP 故障 : Error in assertion processing