
仅实现 jwt 认证可不依赖 spring security,但若需授权控制、csrf 防护、cors 集成、http 请求过滤等企业级安全能力,则强烈建议采用 spring security——它并非“可选附加组件”,而是经过生产验证的安全基础设施。
仅实现 jwt 认证可不依赖 spring security,但若需授权控制、csrf 防护、cors 集成、http 请求过滤等企业级安全能力,则强烈建议采用 spring security——它并非“可选附加组件”,而是经过生产验证的安全基础设施。
在构建基于 Spring 的微服务系统时,JWT(JSON Web Token)常被用作无状态认证机制。许多开发者发现:仅通过自定义 Filter 解析 Authorization: Bearer
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtTokenProvider tokenProvider;
public JwtAuthenticationFilter(JwtTokenProvider tokenProvider) {
this.tokenProvider = tokenProvider;
}
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
String token = resolveToken(request);
if (token != null && tokenProvider.validateToken(token)) {
Authentication auth = tokenProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(request, response);
}
private String resolveToken(HttpServletRequest request) {
String bearerToken = request.getHeader("Authorization");
if (bearerToken != null && bearerToken.startsWith("Bearer ")) {
return bearerToken.substring(7);
}
return null;
}
}然而,仅靠此类自研逻辑远不足以构成健全的安全体系。Spring Security 不仅封装了认证流程,更提供了开箱即用的企业级防护能力:
- ✅ 细粒度授权:支持方法级(@PreAuthorize("hasRole('ADMIN')"))、URL 级(http.authorizeHttpRequests(a -> a.requestMatchers("/api/admin/**").hasRole("ADMIN")))及域对象级权限控制;
- ✅ 跨域(CORS)统一管理:避免手动配置响应头带来的遗漏风险;
- ✅ HTTP 请求防火墙(HttpFirewall):默认拦截路径遍历(如 ..%2F)、编码绕过等恶意路径;
- ✅ CSRF 防护:对非幂等请求(POST/PUT/DELETE)自动校验令牌,防止跨站请求伪造;
- ✅ 会话管理、Remember-Me、OAuth2 Resource Server 等扩展模块:平滑演进至更复杂认证场景。
关于你提出的三层架构设计(CoreAuthorizationService → AuthService → 各业务服务中的 Filter),其职责分离思路合理,但需注意:将认证逻辑分散到各服务 Filter 中,易导致重复实现、版本不一致、安全策略碎片化。推荐做法是:
- 将 JWT 公钥/密钥、解析逻辑、用户上下文构建等核心能力封装为 spring-boot-starter-security-jwt 类型的内部 Starter;
- 在所有需要认证的服务中统一引入该 Starter,并通过 @EnableWebSecurity 集成 Spring Security;
- 利用 SecurityFilterChain Bean 声明式定义认证/授权规则,而非硬编码 Filter。
总结而言:可以不用 Spring Security 实现 JWT 认证,但不应“主动放弃”它。Spring Security 是经十年以上生产锤炼的安全框架,其价值不在于“是否必需”,而在于“能否以最小成本获得最大安全保障”。初期快速验证可轻量起步,但一旦进入预发布或生产环境,应尽快迁移到 Spring Security 标准实践——这不是技术债,而是安全基建的必要投入。










