栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用@RolesAllowed和@PreAuthorize保护控制器方法

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用@RolesAllowed和@PreAuthorize保护控制器方法

您描述的症状使我想到了代理问题。注释在服务层上运行良好,因为服务通常实现接口,并且Spring可以轻松地使用JDK代理来放置AOP授权。

但是控制器通常不实现接口。这就是为什么在服务层中更频繁地使用PreAuthorize批注的原因。恕我直言,您最好尝试使用基于URL模式的授权,而不是控制器上的PreAuthorize批注。另一种选择是将目标类代理与CGLIB一起使用。

要使用

PreAuthorize
和JSR-250批注,您必须

  • 使用以下注释为spring安全配置类添加注释:

    @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true)
  • 如果您在应用程序的其他任何地方使用带有JDK代理的Spring AOP,请在要使用方法安全性实现接口的所有控制器类中声明所有受保护的方法

  • 如果您在带有CGLIB代理的应用程序Spring AOP中使用其他任何地方,请添加

    proxyTargetClass = true
    @EnableGlobalMethodSecurity

    @EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true,    proxyTargetClass = true)
  • 如果要在3.2版以下的Spring版本中使用CGLIB代理,请将CGLIB库添加到类路径(Spring 3.2+中包含CGLIB类)

  • 避免混合使用CGLIB和JDK代理,因为Spring文档不建议这样做: 在运行时将多个部分折叠到一个统一的自动代理创建器中,该创建器将应用任何部分中最强的代理设置(通常来自不同的XML bean定义文件)指定。 这也适用于和元素。 需要明确的是:在或元素上使用’proxy-target-class =“ true”’会强制对所有三个元素使用CGLIB代理。

但是无论如何,我的建议是尝试将方法安全性转移到通常已经支持AOP的服务层。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390735.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号