Java RestEasy:Base64编码登录REST

时间:2017-01-06 15:09:16

标签: java soap wsdl base64 resteasy

我在尝试验证一对令牌/签名以进行网络服务登录时遇到了麻烦。

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

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

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

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

用于令牌和签名验证的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接收为String:

@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可以正常工作。

感谢。

1 个答案:

答案 0 :(得分:1)

由于我无法使用base64到String转换解决问题,我已完成以下操作:

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

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

提供