我正在使用带有 Spring WS 的 Jaxb 2,并且我有一个拦截器,它被定向到一个特定的有效负载,它工作正常。
这里我的需求是从我的拦截器的handleRequest方法中读取请求参数。我知道这应该是相当直接的。但是无法找到读取请求参数的方法。目前我的 handleRequest 方法如下所示。
@Override
public boolean handleRequest(MessageContext messageContext, Object endpoint)
throws Exception {
boolean proceed = true;
SaajSoapMessage saajSoapMessage =
(SaajSoapMessage) messageContext.getRequest();
SOAPMessage soapMessage = saajSoapMessage.getSaajMessage();
Document doc = saajSoapMessage.getDocument();
Element element = doc.getElementById("request");
}
Run Code Online (Sandbox Code Playgroud)
我的端点类的相关部分是
@PayloadRoot(namespace = NAMESPACE, localPart = "confirOrderRequest")
public @ResponsePayload ConfirmOrderResponse handleConfirmOrder(
@RequestPayload ConfirmOrderRequest confirmOrderRequest) {
...........
}
Run Code Online (Sandbox Code Playgroud)
这里我的要求是获取ConfirmOrderRequest拦截器 handleRequest 方法中附带的 orderId ,有没有办法直接做到这一点,或者我需要为此做一些 XML 解析?
在这里,我的方案有点类似于Gmail的双因素身份验证.当用户成功登录(SMS代码发送给用户)时,他将被另一页面挑战以输入SMS代码.如果用户正确获取SMS代码,则会显示安全页面(如Gmail收件箱).
我对此做了一些研究,建议不是在登录时给ROLE_USER,给他PRE_AUTH_USER并显示他输入SMS代码的第二页; 成功后给他们ROLE_USER.
但是,我的问题是Spring有InsufficientAuthenticationException,在这种情况下我们不会使用它.在我的场景中是否还有其他更好的方法来实现双因素身份验证?
PS我有一些定制的弹簧安全配置.在我的登录页面,除了用户名和密码,我也有Recaptcha验证,我的authenticationProviderm authenticationSuccessHandler,logoutSuccessHandler,accessDeniedHandler都是自定义的.
我有java程序,它计算SHA-256校验和如下.例如,如果我提供输入abcd123ABCD00-4000,则输出0QtyIu4B + lU + TLqM/zfJz5ULVpyXgfLRs5mKXCQvbHM =.它还匹配在线支票和计算器.
但是我使用的PHP代码与它不匹配.
PHP代码:
$s = 'abcd123ABCD00-4000';
$signature = base64_encode(hash_hmac("sha256", $s, True));
print base64_encode($signature);
Run Code Online (Sandbox Code Playgroud)
输出:TWpRM1pEWXpaVFl4TURoallqTXdPRFV6WVRrNU5XVTRNRGxoWkRJMU1XWTVNREk1TnpBeU4ySXhaR0psTW1ZMk16Y3hPRE01WldFelkySXhOalJrWXc9PQ ==
Java代码:
private static String getSHA256Hash(String text) {
String hash = null;
MessageDigest md = null;
try {
md = MessageDigest.getInstance("SHA-256");
md.update(text.getBytes("UTF-8"));
byte[] shaDig = md.digest();
// hash = Hex.encodeHexString(shaDig);
hash = Base64.encodeBase64String(shaDig);
} catch (NoSuchAlgorithmException ex) {
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return hash;
}
Run Code Online (Sandbox Code Playgroud)
输出:0QtyIu4B + lU + TLqM/zfJz5ULVpyXgfLRs5mKXCQvbHM =
这里我想要的是获得PHP中的等效结果(即更改PHP代码以匹配Java程序的结果[我将无法更改Java代码].任何帮助表示赞赏