我正在尝试使用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,但没有签名(它只是某种垃圾)。
任何人都可以帮助我吗?谢谢
答案 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));
}
如果有人能解释我为什么会这样,我会很感激,因为我仍然可以找到理由... 谢谢