Spring Security可以在Spring控制器上使用@PreAuthorize方法吗?

Spring Security可以在Spring控制器上使用方法吗?@PreAuthorize


答案 1

是的,它工作正常。

您需要在 .它还需要 CGLIB 代理,因此您的控制器不应具有接口,或者您应该使用 .<security:global-method-security pre-post-annotations="enabled" />...-servlet.xmlproxy-target-class = true


答案 2

请参阅春季安全常见问题解答(强调我的)。

在Spring Web应用程序中,为调度程序servlet保存Spring MVC bean的应用程序上下文通常与主应用程序上下文分开。它通常在一个名为myapp-servlet.xml的文件中定义,其中“myapp”是分配给web.xml中Spring DispatcherServlet的名称。一个应用程序可以有多个 DispatcherServlet,每个 DispatcherServlet 都有自己独立的应用程序上下文。这些“子”上下文中的 Bean 对应用程序的其余部分不可见。“父”应用程序上下文由您在 Web 中定义的 ContextLoaderListener 加载.xml并且对所有子上下文都可见。此父上下文通常是定义安全配置(包括元素)的位置。因此,不会强制实施应用于这些 Web Bean 中的方法的任何安全约束,因为无法从 DispatcherServlet 上下文中看到这些 Bean。您需要将声明移动到 Web 上下文,或者将要保护的 Bean 移动到主应用程序上下文中。

通常,我们建议在服务层而不是在单个 Web 控制器上应用方法安全性。

如果将切入点应用于服务图层,则只需在应用的安全上下文中进行设置。<global-method-security>