Spring 安全性:@PreAuthorize 只能与@RequestMapping 一起使用
Spring Security: @PreAuthorize works only together with @RequestMapping
我有一个 Spring MVC 控制器,想用 Spring 方法安全性来保护它。
在下面的示例中 它有效 - @RequestMapping
和 @PreAuthorize
注释相同的方法:
@Controller
public class MyController {
@RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})
@PreAuthorize("isAuthenticated()")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return test(request, response);
}
public ModelAndView test(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
}
在这个例子中它不起作用 - @RequestMapping
和@PreAuthorize
注释不同的方法:
@Controller
public class MyController {
@RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return test(request, response);
}
@PreAuthorize("isAuthenticated()")
public ModelAndView test(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
}
这种奇怪行为的原因可能是什么?
在第二个示例中,test
方法直接从 handleRequest
方法调用。 Spring 没有机制来拦截来自同一个 class 中的方法调用。因此,@PreAutorize
的 Proxy / AOP 方法 inception 永远不会被调用。
我有一个 Spring MVC 控制器,想用 Spring 方法安全性来保护它。
在下面的示例中 它有效 - @RequestMapping
和 @PreAuthorize
注释相同的方法:
@Controller
public class MyController {
@RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})
@PreAuthorize("isAuthenticated()")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return test(request, response);
}
public ModelAndView test(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
}
在这个例子中它不起作用 - @RequestMapping
和@PreAuthorize
注释不同的方法:
@Controller
public class MyController {
@RequestMapping(value = "/test", method = {RequestMethod.POST, RequestMethod.GET})
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return test(request, response);
}
@PreAuthorize("isAuthenticated()")
public ModelAndView test(HttpServletRequest request, HttpServletResponse response) throws Exception {
...
}
这种奇怪行为的原因可能是什么?
在第二个示例中,test
方法直接从 handleRequest
方法调用。 Spring 没有机制来拦截来自同一个 class 中的方法调用。因此,@PreAutorize
的 Proxy / AOP 方法 inception 永远不会被调用。