JAVA:Restful Web服务没有正确传递参数

时间:2014-07-07 13:47:56

标签: java spring rest spring-mvc digital-signature

我正在尝试使用spring mvc创建一个简单的休息服务。除了一种方法外,一切都很好!

我想传递一个签名(使用私钥),用Base64编码(使用弹性城堡编码器)作为参数,这样我就可以在服务器端验证它。问题是,签名没有正确到达服务器!

我的服务器方法:

@RequestMapping("/indirectAcess")
public @ResponseBody byte[] getResource(
        @RequestParam(value="id", required=true) String idString,
        @RequestParam(value="url", required=true) String url, 
        @RequestParam(value="sig", required=true) byte[] sig){

    try{
        int id = Integer.parseInt(idString);
        if(IndirectAccessValidate(id, url, sig)){
            return "HERE IS YOUR RESOURCE".getBytes();
        }
        return null;
    } catch(Exception e){
        return "ERROR".getBytes();
    }

}

我的客户端方法:

private static void indirectAccess(Scanner in){
    System.out.print("URL: ");
    String url = in.nextLine();
    Teste finalUrl = client.generateIndirectAccess(url);
    byte[] response = rest.getForObject(indirect, byte[].class, finalUrl.getId(), finalUrl.getUrl(), finalUrl.getSig());
    System.out.println(new String(response));
}

我试图调试它,服务器正在接收ID和URL,但没有签名(它只是某种垃圾)。

任何人都可以帮助我吗?谢谢

1 个答案:

答案 0 :(得分:0)

过了一会儿我解决了!

我仍然不知道为什么,但我必须将签名作为Base64.encodeBase64URLSafeString(finalUrl.getSig()

传递

并将其解码为Base64.decodeBase64(sig)

服务器

    @RequestMapping("/indirectAcess")
    public @ResponseBody byte[] getResource(
            @RequestParam(value="id", required=true) String idString,
            @RequestParam(value="url", required=true) String url, 
            @RequestParam(value="sig", required=true) String sig){

        try{
            int id = Integer.parseInt(idString);
            if(IndirectAccessValidate(id, url, Base64.decodeBase64(sig))){
                return "HERE IS YOUR RESOURCE".getBytes();
            }
            return null;
        } catch(Exception e){
            return "ERROR".getBytes();
        }

    }

客户端

private static void indirectAccess(Scanner in){
    System.out.print("URL: ");
    String url = in.nextLine();
    Teste finalUrl = client.generateIndirectAccess(url);
    byte[] response = rest.getForObject(indirect, byte[].class, finalUrl.getId(), finalUrl.getUrl(), Base64.encodeBase64URLSafeString(finalUrl.getSig()));
    System.out.println(new String(response));
}

如果有人能解释我为什么会这样,我会很感激,因为我仍然可以找到理由... 谢谢