在SpringBoot项目中,针对某个web接口,如果不想进行token校验,可以多种实现方式,这里比对其中的两种。
@PublicMapping 和 WebMvcConfigurer 中的 excludePathPatterns 都可以实现不进行 token 校验的效果,但它们的实现方式和应用场景有所不同:
相似点
两者都能使特定接口绕过身份验证(如 token 校验),都是用于标识或配置不需要安全验证的公共接口
不同点
(1)实现层级不同:
@PublicMapping 是注解级别的控制,直接在控制器方法上声明
excludePathPatterns 是配置级别的控制,在全局配置类中集中管理
(2)灵活性不同:
@PublicMapping 更灵活,可以精确到单个方法
excludePathPatterns 需要维护路径列表,适合批量排除
(3)关注点分离:
@PublicMapping 与业务代码在一起,更直观
excludePathPatterns 将安全配置集中管理,更符合配置与业务分离原则
最佳实践
对于少量明确的公共接口,使用 @PublicMapping 更简洁
对于大量公共接口或需要动态配置的情况,使用 excludePathPatterns 更合适
也可以两者结合使用,@PublicMapping 用于业务层标记,excludePathPatterns 用于框架层配置
两者最终效果在"不进行token校验"这一点上是相同的,只是实现方式不同。