如何对每个用户使用特定网址@PathVariable
的micorservice方法只允许一个请求。
我的控制器
@RestController
@RequestMapping(value = "/rest/product", produces = "application/json;charset=UTF-8")
public class ProductRestController {
@Autowired
ProductService productService;
@Autowired
ProductAsm productAsm;
@RequestMapping(value = "/ID/{ID}", method = RequestMethod.GET)
public ResponseEntity<ProductResource> getProductID(@PathVariable("ID") Long ID, @AuthenticationPrincipal User) {
Product product = productService.getProduct(ID);
if (product == null)
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
return new ResponseEntity<>(productAsm.toResource(product), HttpStatus.OK);
}
例如:
/rest/product/ID/2231
/rest/product/ID/2545
(使用login =“xaxa”)/rest/product/ID/2231
不允许用户(使用login =“xaxa”)实现此功能的最佳方法是什么?(我是否可以通过DB中的用户登录来保留此URL请求,或者已有解决方案)
答案 0 :(得分:1)
您可以使用AOP并实现您自己的方面,在您的Rest Endpoint方法之前调用。
此切入点将读取请求中提供的ID,并尝试查找与此ID对应的Lock。通常 - 尝试访问资源并可能等待。
实施可以基于番石榴的Striped课程 - 至少在开始时。
有几个问题需要考虑: