返回介绍

14.1.1 使用 @Secured 注解限制方法调用

发布于 2024-08-17 00:45:49 字数 1725 浏览 0 评论 0 收藏 0

在Spring中,如果要启用基于注解的方法安全性,关键之处在于要在配置类上使用@EnableGlobalMethodSecurity,如下所示:

除了使用@EnableGlobalMethodSecurity注解,我们可能也注意到配置类扩展了GlobalMethodSecurityConfiguration。在第9章中,Web安全的配置类扩展了WebSecurityConfigurerAdapter,与之类似,这个类能够为方法级别的安全性提供更精细的配置。

例如,如果我们在Web层的安全配置中设置认证,那么可以通过重载GlobalMethodSecurityConfiguration的configure()方法实现该功能:

在本章稍后的14.2.2小节中,我们将会看到如何重载GlobalMethodSecurity-Configuration的createExpressionHandler()方法,提供一些自定义的安全表达式处理行为。

让我们回到@EnableGlobalMethodSecurity注解,注意它的securedEnabled属性设置成了true。如果securedEnabled属性的值为true的话,将会创建一个切点,这样的话Spring Security切面就会包装带有@Secured注解的方法。例如,考虑如下这个带有@Secured注解的addSpittle()方法:

@Secured注解会使用一个String数组作为参数。每个String值是一个权限,调用这个方法至少需要具备其中的一个权限。通过传递进来ROLE_SPITTER,我们告诉Spring Security只允许具有ROLE_SPITTER权限的认证用户才能调用addSpittle ()方法。

如果传递给@Secured多个权限值,认证用户必须至少具备其中的一个才能进行方法的调用。例如,下面使用@Secured的方式表明用户必须具备ROLE_SPITTERROLE_ADMIN权限才能触发这个方法:

如果方法被没有认证的用户或没有所需权限的用户调用,保护这个方法的切面将抛出一个Spring Security异常(可能是AuthenticationException或AccessDeniedException的子类)。它们是非检查型异常,但这个异常最终必须要被捕获和处理。如果被保护的方法是在Web请求中调用的,这个异常会被Spring Security的过滤器自动处理。否则的话,你需要编写代码来处理这个异常。

@Secured注解的不足之处在于它是Spring特定的注解。如果更倾向于使用Java标准定义的注解,那么你应该考虑使用@RolesAllowed注解。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文