我的REST API的JS客户想知道,是一个查询,以允许或没有一定的URL。 权限使用标准的注释的控制器方法配置:
@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客户端试图访问一个网址本身,忽略结果,并期待仅在状态(200或403-禁止)进行编程。 这不是最好的性能,明智的,但至少正确功能。 但对于写方法我看不出有什么办法解决。 望有此问题的理智的解决方案。
PS感谢@Bogdan的解决方案。 这是我所需要的方法的全文:
@Autowired
WebInvocationPrivilegeEvaluator evaluator;
@RequestMapping("/check")
public String check(String url, Authentication authentication) {
return Boolean.toString(evaluator.isAllowed(url, authentication));
}