在我的一项 REST 服务中,我利用 Spring Security 来验证标头中传递的令牌。然而,spring 无法找到“Authorization”标头,即使它在那里。在测试中甚至在本地进行测试时这都不是问题,但当我们部署到 PROD 时,我们遇到了这个问题。
作为替代/解决方法,我删除了 Spring 安全性,而是尝试在实际端点中验证我的令牌,然后再继续请求的其余部分,如下所示:
@PostMapping(value="/create",consumes="application/json; charset=utf-8")
@CrossOrigin
public ResponseEntity createAccount(@RequestBody MerchantAccount merchantAccount,@RequestHeader(name="Authorization") String token) {
log.info("Checking User Token");
if(!jwtUtil.isAuthorizedToken(token))
return ResponseEntity.status(401).build();
//some creating Account Logic
}
Run Code Online (Sandbox Code Playgroud)
如果我再次执行上述操作,它将在 TEST 和 LOCAL 中工作,但在 PROD 中不起作用。我收到的错误是“缺少授权标头”。但它再次出现。(从邮递员测试到)。
经过一番研究,我发现我可以添加“,required = false”,这样spring就不会检查它,但仍然没有可以提取的令牌。
PROD 和 TEST 与我本地的唯一区别如下:
Java版本 测试中的java版本:java version "1.6.0_32"
PROD 上的 java 版本:java version "1.8.0_121"
本地java版本:java version "1.8.0_221"
在测试中我们使用 HTTP,PROD 使用 HTTPS。POM文件中的Spring Security版本是5.2
编辑 在我的网络配置中,我确实有一个部分允许出现“授权”标头,如下所示。
@Bean
public CorsConfigurationSource corsConfigurationSource() {
final CorsConfiguration configuration = …Run Code Online (Sandbox Code Playgroud) 我有一个已设置并连接到我的后端的电报机器人。当用户选择“输入密码”选项时,我会在请求旁边发送一个内嵌键盘,以便用户可以输入他的数字密码。我这样做是为了不会在聊天中显示密码。我遇到的问题是我使用 callback_data 为按下的按钮分配一个值,但是当按下按钮时,这些回调会一一发生。我想知道是否可以建立一个累积的按下字符字符串,一旦按下“提交”按钮,就可以通过用户的响应发送。
我的内联请求目前如下所示:
{
"chat_id": 99999999,
"text": "Enter Password",
"reply_markup": {
"inline_keyboard": [
[{"text": "1","callback_data":"1","pay":true},{"text": "2","callback_data":"2"},{"text": "3","callback_data":"3"}],
[{"text": "4","callback_data":"4"},{"text": "5","callback_data":"5"},{"text": "6","callback_data":"6"}],
[{"text": "7","callback_data":"7"},{"text": "8","callback_data":"8"},{"text": "9","callback_data":"9"}],
[{"text": "0","callback_data":"0"}],
[{"text": "Submit","callback_data":"Submit"}]
]
}
}
Run Code Online (Sandbox Code Playgroud)
此外,还可以在按下提交后使内联按钮消失,我已经浏览了电报机器人文档,并且可以找到任何这样的选项。 https://core.telegram.org/bots/api#sendmessage
请告知这是否可行,或者我是否应该采取另一种方法。