Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring中id为的安全端点_Java_Spring_Spring Boot_Spring Security - Fatal编程技术网

Java spring中id为的安全端点

Java spring中id为的安全端点,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我有一个关于春季安全的问题。假设我有这样的端点 /orders/order/{userId} 当我有多个登录用户并且有人可以键入另一个登录用户的userId时,如何防止这种情况。比如说 用户1具有id=1 用户2拥有id=2 现在用户_2只需输入用户_1的id,检索或删除他的订单。我是否应该检查每个请求的URL id是否等于当前登录的用户,或者是否有更好的方法使用spring security实现这一点?。当我在URL模式中使用用户名而不是用户id时,也会出现相同的情况,例如 /order

我有一个关于春季安全的问题。假设我有这样的端点

 /orders/order/{userId}
当我有多个登录用户并且有人可以键入另一个登录用户的userId时,如何防止这种情况。比如说

用户1具有
id=1

用户2拥有
id=2

现在用户_2只需输入用户_1的id,检索或删除他的订单。我是否应该检查每个请求的URL id是否等于当前登录的用户,或者是否有更好的方法使用spring security实现这一点?。当我在URL模式中使用用户名而不是用户id时,也会出现相同的情况,例如

 /orders/order/{username}

你有任何认证吗?
用户登录后,您可以使用令牌(例如JWT)处理他/她的id,并将URL中的id与令牌中编码的id进行匹配,尽管此时URL中的id变得无用。

当用户使用其凭据登录时,我们通常会为其生成唯一令牌并将其发送给客户端。然后,客户机发送该令牌以请求进一步验证服务器端的用户。您可以创建并使用Utils类来生成令牌和验证用户。当用户在
/orders/order/{userId}
发出请求时,获取userId并将其与令牌中的userId映射。如果有效,则执行所需操作或给出响应
401/403
(我在这里以JWT令牌为例)


是的,我有基于JWT的身份验证。所以我应该将用户id存储在令牌中,然后当我对特定用户进行身份验证时,我应该将编码的id与url请求中的id进行比较?正如Ronald Hund所写:如果传递JWT令牌,那么就不需要在url中发送用户id
public String getUsernameFromToken(String token) {
     return getClaimFromToken(token, Claims::getSubject);
} 

 public String generateToken(User user) {
     return doGenerateToken(user.getEmail() , user.getRole());
 }