gpt4 book ai didi

java - 是否可以在不执行 Spring Controller 方法的情况下检查权限?

转载 作者:行者123 更新时间:2023-11-29 03:14:59 25 4
gpt4 key购买 nike

我的 REST API 的 JS 客户端想知道,是否允许对某个 URL 的查询。使用标准注释在 Controller 方法上配置权限:

@Controller
@RequestMapping("/books")
public class BooksController {

@RequestMapping("read")
@Secured("ROLE_READER")
public ModelAndView read(int id) { ... }

@RequestMapping("write")
@Secured("ROLE_WRITER")
public ModelAndView write(int id, String contents) { ... }
}

@Controller
@RequestMapping("/util")
public class UtilController {

@RequestMapping("check")
public String check(String url) {
//if url is "/books/read" and isUserInRole("ROLE_READER")
//or url is "/books/write" and isUserInRole("ROLE_WRITER")
//return "true", otherwise "false"
}
}

对于只读方法,可以对 JS 客户端进行编程以尝试访问 URL 本身,忽略结果并仅查看状态(200 或 403-Forbidden)。它在性能方面不是最好的,但至少在功能上是正确的。但是对于 write 方法,我认为没有办法解决。希望这个问题有一个明智的解决方案。

附言感谢@Bogdan 提供的解决方案。这是我需要的方法全文:

@Autowired
WebInvocationPrivilegeEvaluator evaluator;

@RequestMapping("/check")
public String check(String url, Authentication authentication) {
return Boolean.toString(evaluator.isAllowed(url, authentication));
}

最佳答案

对于您发布的 UtilController,您可以使用类似 WebInvocationPrivilegeEvaluator 的东西,也许还可以看看 authorize tag 是如何实现的有效。

此外,根据您正在做的事情,这样的事情也可能有效:

@Controller
@RequestMapping("/books")
public class BooksController {

@RequestMapping("read")
@Secured("ROLE_READER")
public ModelAndView read(int id) { ... }

@RequestMapping("canRead")
@Secured("ROLE_READER")
public void canRead() { }

@RequestMapping("write")
@Secured("ROLE_WRITER")
public ModelAndView write(int id, String contents) { ... }

@RequestMapping("canWrite")
@Secured("ROLE_WRITER")
public void canWrite() { }
}

您还可以检查多个角色:

@RequestMapping("canReadOrWrite")
@Secured({"ROLE_READER", "ROLE_WRITER"})
public void canReadOrWrite() { }

然后您可以检查调用新方法的状态代码。

关于java - 是否可以在不执行 Spring Controller 方法的情况下检查权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27213825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com