java - 使用 AspectJ 与 SpringInterceptor 保护应用程序
问题描述
这是一个非常棘手的问题,我知道。好吧,我会尽力澄清它。
我正在编写一个受 JWT 和 OAuth2 保护的 Spring API,我不想使用 Spring Security 层。换句话说,我想用我自己的规则创建我自己的安全层,等等......
也就是说,我找到了两种在国外创建此图层网络的选项。
- 方面J
- 弹簧拦截器
方面J
使用 AspectJ,我可以创建一个方面来包装每个带有注释的方法,@MySecurityAnnotation(role="bar", permission="foo", group="blah")
并允许用户在joinPoint
没有正确权限的情况下调用。
使用这种方法,代码被混淆了,因为 AspectJ 将代码注入到.class最终文件中。(如果我说的是废话,请纠正我)。另一方面,我不需要通过反射来验证带注释的类型,因为代码已经被包装了。
弹簧拦截器
使用拦截器,顾名思义,它为每个请求创建了一个单点拦截HandlerMethod
,现在我需要检查每个请求,如果请求指向 a HandlerMethod
,它应该是为了验证用户凭据。
所以我认为这比 AspectJ 实现要慢,因为我们需要通过反射检查带注释的方法,以获取访问端点所需的角色/权限。
好的,我已经解释了这两种情况,现在我只想知道哪种情况最好以及在哪种情况下最好。有人会花几个小时思考这个问题,比如我?是否还有其他未列出的实现?有没有更好的方法在没有 Spring Security 层的 Spring API 中实现安全性?请告诉我。
感谢所有这些帮助。
解决方案
推荐阅读
- tensorflow - Keras 自定义层问题
- c++ - 如何减少此函数内的递归
- python - Python - 无法从类中的 py 文件调用函数?
- python - exec() 赋值后的 Python 类型提示
- spring-boot - MvcResult 的 getResponse().getContentAsString() 返回一个空数组
- reactjs - React-Bootstrap 模式仅显示和删除最后一个映射元素
- database - 我的 BigTable 架构会导致热点吗?
- mongodb - 带有卷的mongo docker如何指定logpath和dbpath?
- bash - Shell 脚本在作为 AWS SSM 命令的一部分运行时出错
- javascript - 存储 Angular 应用的动作映射