我在GWT项目中实施了XSRF保护服务。我正在使用GWT 2.6.0版本。当我尝试在浏览器中加载我的应用程序时,我得到一个非常奇怪的例外,如下所示:
未捕获的com.google.gwt.user.client.rpc.RpcTokenException:无效的RPC令牌(无效的RpcToken类型:预期' com.google.gwt.user.client.rpc.XsrfToken'但得到了& #39; class com.google.gwt.user.client.rpc.XsrfToken')
我搜索了我的类路径,我只有一个位于我的WAR文件中的gwt-servlet.jar提供的XsrfToken类。我从GIT下载了2.6代码,我看到抛出异常的代码由ProxyCreator.java在方法generateCheckRpcTokenTypeOverride中提供。
有没有人知道为什么会抛出这个异常。该错误至少向我表明它应该通过,因为预期的是它有什么。
我为了完整性而粘贴了该方法:
protected void generateCheckRpcTokenTypeOverride(SourceWriter srcWriter, TypeOracle typeOracle,
SerializableTypeOracle typesSentFromBrowser) {
JClassType rpcTokenType = typeOracle.findType(RpcToken.class.getName());
JClassType[] rpcTokenSubtypes = rpcTokenType.getSubtypes();
String rpcTokenImplementation = "";
for (JClassType rpcTokenSubtype : rpcTokenSubtypes) {
if (typesSentFromBrowser.isSerializable(rpcTokenSubtype)) {
if (rpcTokenImplementation.length() > 0) {
// >1 implematation of RpcToken, bail
rpcTokenImplementation = "";
break;
} else {
rpcTokenImplementation = rpcTokenSubtype.getQualifiedSourceName();
}
}
}
if (rpcTokenImplementation.length() > 0) {
srcWriter.println("@Override");
srcWriter.println("protected void checkRpcTokenType(RpcToken token) {");
srcWriter.indent();
srcWriter.println("if (!(token instanceof " + rpcTokenImplementation + ")) {");
srcWriter.indent();
srcWriter.println("throw new RpcTokenException(\"Invalid RpcToken type: " + "expected '"
+ rpcTokenImplementation + "' but got '\" + " + "token.getClass() + \"'\");");
srcWriter.outdent();
srcWriter.println("}");
srcWriter.outdent();
srcWriter.println("}");
}
}
非常感谢。