最近,一个小合作伙伴问了微信集团的春季安全许可问题::
很多时候事情是如此巧合。Tienchin是最近的工作,也基于应对权限的注释。因此,由于每个人都有这个问题,所以让我们谈谈这个话题。
当然,我不会谈论一些基本知识。对于不熟悉春季安全的小型合作伙伴,您可以在公共帐户的背景中回复SS。有一系列原始的教程。
让我们看一下春季安全权限注释的特定用法,如下:
与上述类似,这意味着当前用户需要拥有执行当前接口方法的权限。
然后了解@preatuthorize注释的原则,我认为我必须从两个方面开始:
让我们一个一个一个一个。
春季表达语言(SPEL)是一种强大的表达语言,在操作时支持查询和操作。该语法类似于传统的EL,但它提供了其他功能。最好的是函数调用和简单字符串的模板函数。
SPEL为春季社区提供了一种简单有效的表达语言,该语言可以通过整个春季产品组运行。该语言的特征是基于春季产品的需求而设计的,这是出现的主要功能。
虽然我们与春季框架密不可分,但实际上,我们不能没有Spel,因为它太容易使用且强大,而Spel在整个春季家庭中也处于非常重要的位置。但是很多次,我们只知道这一点。实际上,如果您系统地学习了Spel,那么上面的春季安全性注释实际上是充分理解的。
我将使用一个简单的示例与您一起使用Spel。
为了节省麻烦,我将创建一个春季启动项目以与您展示。创建时,无需添加任何其他依赖项。
代码显示如下:
表达式是我们自定义的表达式字符串。该字符串通过ExpressionParser对象将其分析为表达式,然后可以执行该EXP。
执行执行时有两种方法。对于上面没有其他变量的情况下,我们可以直接执行,执行方法如下:
此打印结果为3。
我记得有一个小朋友以前曾要求在小组中执行弦乐表情,但我不知道该怎么办。JS中有一个评估功能非常方便。我们在Java中也有Spel,这也非常方便。
但是,很多时候,我们要执行的表达可能会更加复杂。目前,此呼叫方法还不够。
目前,我们可以为表达式设置上下文环境。目前,将使用评估界面或其子类,如下:
当然,上面的表达不需要设置上下文环境。我举例说明上下文环境。
例如,我现在有一个用户类,如下:
现在我的表情就是这样:
此表达式指示以获取用户对象的用户名属性。将来,创建一个用户对象,将其放入StandardEvaluationContext中,并根据此对象执行表达式以打印所需的结果。
如果我们将用户对象设置为rootObject,则表达式中没有用户,如下:
该表达式是用户名字符串。将来执行时,它将自动找到用户名的值并从用户返回。
当然,表达也可以是一种方法。例如,我将以下两种方法添加到用户类:
我们可以通过表达式调用这两种方法,如下:
打电话给人参Sayhello:
只需写入方法名称并执行它即可。
致电非参数Sayhello:
这些很容易理解。
即使我们的表情也可能涉及春季的豆子。例如,我们从春季注册以下bean:
然后在名为我们的豆子中调用sayhello方法,如下:
为配置上下文环境设置Bean解析器。该Bean解析器将自动跟进名称以找到响应的BEN并从Spring容器中执行相应的方法。
当然,关于Spel的游戏玩法很多,我不会一个人列出它们。这主要是要让我的朋友知道,有这样的技术可以使每个人都可以理解@preatuthorize注释的原理。
接下来,我们将返回Spring Security,以查看@preauthorize注释。
权限的实施是数千万,并且有各种权限模型。
歌曲的前VHR使用了前者。
@PreAuthorize的注释当然与后者相对应。这次完成的Tienchin项目是后者。让我们看看一个例子:
请注意,这是什么意思?
这种haspermi方法的逻辑实际上非常简单:
此判断逻辑非常简单,也就是说,要获取当前的登录用户以确定当前请求是否需要当前所需的授权。关于特定判断逻辑,没有什么可说的,只是查看是否有字符串收藏。
那么这种方法在哪里呢?
每个人都知道,弹簧安全性的处理权限的过滤器是filtersecurityinterceptor,所有权限处理最终都将出现在此过滤器中。在此过滤器中,将使用各种选民,投票和其他工具。我不会在这里说。以前的春季安全系列教程已详细介绍。
在选民中,我们可以看到专门处理的@preatuthorize评论,“准备” preadauthorizationAdvicevoter,让我们看一下他的核心方法:
框架的源代码很好,您知道他乍一看要做什么!在此处输入最后一句话,在建议中致电通知以确定是否满足了权限:
现在,当您在方法之前看到此问题时,您应该感到更加熟悉。
这很简单吗?
好吧,我今天会和我的朋友分享很多。在最近由Song启动的Tienchin Project视频中,我还将与您讨论视频形式的知识点。
原始:https://juejin.cn/post/7100750309122637861