我创建了一个后端spring-boot REST api,它部署在使用JWT进行身份验证的EC2上。所以,我首先要获得持票人令牌:
package problems;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class SortByFrequency {
public static void main(String args[]) {
int arr[] = { 2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8 };
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
int len = arr.length;
for (int j = 0; j < len; j++) {
if (map.get(arr[j]) == null) {
map.put(arr[j], 1);
} else {
map.put(arr[j], (Integer) map.get(arr[j]) + 1);
}
}
Set<Entry<Integer, Integer>> set = map.entrySet();
ArrayList<Entry<Integer, Integer>> list = new ArrayList<Entry<Integer, Integer>>(set);
list.sort(new Comparator<Entry<Integer, Integer>>() {
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
if (o1.getValue() < o2.getValue()) {
return 1;
} else if (o1.getValue() > o2.getValue()) {
return -1;
} else if (o1.getValue() == o2.getValue()) {
if (o1.getKey() < o2.getKey()) {
return 1;
} else {
return -1;
}
}
return 0;
}
});
for (Map.Entry<Integer, Integer> en : list) {
int val = en.getValue();
while(val!=0){
System.out.println(en.getKey());
val--;
}
}
}
}
然后进行REST调用以访问我的REST资源
curl -iH "Content-Type: application/json" -X POST -d '{"username":"myusername", "password":"mypassword"}' http://123.45.6782.910:8080/login
一切正常。
现在,我想使用API网关访问curl -H "Authorization: eyJhbGzd9.NYHXPv-vXUIoNr7qtA" http://123.45.6782.910:8080/categories/pets/
资源。
我已经设置了GET - 方法执行的方法请求,集成请求部分。但是,当我尝试测试设置时,我得到403。
/categories/pets/
我认为这是预料之中的,因为我直接尝试在没有持票人令牌的情况下访问后端api。我想知道如何在{
"timestamp": 1498392625274,
"status": 403,
"error": "Forbidden",
"message": "Access Denied",
"path": "/categories/pets/"
}
上执行POST以获取承载令牌,然后拨打http://123.45.6782.910:8080/login
?
更新:根据@KaHouIeong的建议,我在API网关上创建了一个POST端点/登录来获取持票令牌。当我在API网关的测试控制台中测试时,我得到了/categories/pets/
但是当我从邮递员那里尝试时,我得到状态200 OK但不是Authorization →Bearer eyJhbGzd9
令牌。
Authorization →Bearer eyJhbGzd9
答案 0 :(得分:3)
您的客户应向/login
发送请求并从响应中获取持有者令牌,然后重新使用令牌访问您的/categories/pets/
API。
工作流程应与您直接点击EC2后端相同。
对于API网关上的API设置,您需要设置/login
资源并指向http://123.45.6782.910:8080/login
然后,您需要设置集成响应标头映射以将Authorization
标头映射回方法响应,然后API网关将通过标头传递给客户端。
integration.response.header.Authorization -> method.response.header.Authorization