具体思路:最开始想使用@PostAuthorize 对非owner用户进行后置拦截,
方法中查出来,再返回
但是想了想 这样有两个缺点: 1. 必须返回用户的数据 (用户名/ID之类的可以用于与authtication效验的)
2. 如果是update,则需要对数据进行回滚
所以:希望可以实现 在执行业务方法之前对数据进行效验
1. 最开始的实现方式: 查了一些资料 ,其中提到可以使用AccessDecisionVoter 进行效验,
但是缺点也很明显, 我的实现方式中执行路径与参数名耦合

2. 自定义@PreAuth中的方法:
如图 _keyword 是request中的参数名,_elMethod 可以理解是可以被EL表达式解析的方法字符串


勉强也能实现吧,但是我发现了更更更更更更正常的实现方法,让我之前的想法都变得很蠢。
@PreAuthorize调用Request参数方法进行判断:
具体实现: 主要是 GetCreator()方法


定义一个能获取到SpringContext上下文的工具类即可

文章探讨了在处理非owner用户的权限拦截时,从使用@PostAuthorize进行后置拦截到转向@PreAuthorize进行前置效验的转变。作者提到了@PostAuthorize的两个缺点,包括需要返回用户数据和在更新操作时的数据回滚问题。然后介绍了尝试使用AccessDecisionVoter的方案,但发现该方案与执行路径耦合。接着,作者提出了自定义@PreAuth方法和使用EL表达式的方法,最后找到了更简洁的实现,即通过@PreAuthorize直接调用Request参数进行判断,利用SpringContext工具类获取上下文信息,从而提高了代码的效率和可读性。
4121





