如果微服务接入了资源服务器,那么所有的资源都会被 Spring Security OAuth 拦截,如果没有合法的 token,请求会被直接拒绝。
需求:访问目标接口不需要提供 token 即可匿名访问。如下图所示,会提示以下错误:
@Inner 注解作用于 Path Variable 风格的请求时需要特别注意,如下图中的 /{id} 会被识别为 /*,从而自动配置到 Spring Security 接口。这会导致其他接口虽然没有加 @Inner 注解,但也会对外暴露并且无法获取用户信息。
注意事项:
/XX/XX/* 是否会影响其他接口
如果封装的接口(例如 Swagger 等)不能加 @Inner 注解,可以参考下文中的配置文件声明。
配置位置:nacos/微服务对应的配置文件
如果通过以上两种方式将接口设置为对外暴露(使用 @Inner 注解或配置文件形式),则当前接口下游的所有逻辑都无法获取当前用户(SecurityUtils.getUser() === null)。
现象:
访问时:
原因:
Spring Security 默认会验证请求中的 token,即使接口是公开的。
解决方案:
如果需要完全忽略 token 验证,可以关闭 Spring Security 的这个行为:
