REST服务接口的anonymousAllowed配置无效

image

image

给单个service的method设置anonymousAllowed="true"后发现依旧无法匿名访问,开启cuba.rest.anonymousEnabled=true以后可以匿名访问,但是这是个全局设置,并不是我需要的。

框架版本:7.2.11

我在 7.2.11 测试是可以的。方便传一个你的测试项目吗?

后来调试发现是服务的签名没匹配上导致的。
这里能改成如果是服务的签名没匹配上优先抛出404而不是401么?

逻辑是这样的:
rest API 用到 Spring security 的安全验证机制,在访问 API 时,首先要进行安全验证。

CUBA 里面的匿名访问,其实是在 CUBA 的 Filter 中为匿名的 API 访问手动添加的匿名安全认证。然后将调用逻辑交给 Spring。
CUBA 的对匿名 api 的处理逻辑是:

  1. 先检查是否请求带了安全认证。
  2. 如果没有,则检查是否访问匿名 API 接口。
  3. 如果是匿名访问的,则添加匿名安全认证。

你这种情况就是第二步检查没过,第三步没有添加安全认证,相当于无安全认证访问接口,先抛出 401 是对的。如果你带了安全认证,才会走到下一步,发现 path 不可用,返回 404。

好的,感谢帮助!