spring security有哪些技术点

38次阅读
没有评论

Spring Security 是一个功能极其强大且高度可定制的身份验证(Authentication)访问控制(Authorization)框架。对于 Java 开发者来说,它的底层逻辑其实就是一串过滤器链(FilterChain)

我们可以将它的核心技术点拆解为以下几个维度:


1. 核心架构:过滤器链 (Security Filter Chain)

Spring Security 的本质是一个 Servlet Filter。当你发起请求时,它会经过层层关卡。

  • DelegatingFilterProxy:将 Servlet 容器的生命周期与 Spring 的 ApplicationContext 连接起来。

  • FilterChainProxy:管理多个 SecurityFilterChain

  • 常用过滤器

    • UsernamePasswordAuthenticationFilter:处理表单登录。

    • BasicAuthenticationFilter:处理 HTTP Basic 认证。

    • ExceptionTranslationFilter:捕获异常并决定是跳转登录页面还是返回 403。

    • FilterSecurityInterceptor:最终守门员,决定你有没有权限访问目标 URL。


2. 身份验证 (Authentication) —— “你是谁?”

这是 Spring Security 的第一大任务。

  • AuthenticationManager:认证的核心入口,通常使用其实现类 ProviderManager

  • AuthenticationProvider:真正的认证执行者。你可以自定义它来对接指纹、短信验证码、LDAP 等。

  • UserDetailsService:核心接口。你通过实现它,从数据库中加载用户信息(用户名、密码、权限)。

  • PasswordEncoder:密码加密。现在默认推荐使用 BCryptPasswordEncoder(自带盐值的哈希算法)。

  • SecurityContextHolder:存放当前登录用户详情的容器。你可以通过 SecurityContextHolder.getContext().getAuthentication() 在代码任何地方获取当前用户。


3. 权限控制 (Authorization) —— “你能干什么?”

认证通过后,系统会检查你的“通行证”是否有权进入某个房间。

  • 基于请求的权限:在配置类中使用 .requestMatchers("/admin/**").hasRole("ADMIN")

  • 基于方法的权限:使用注解,如 @PreAuthorize("hasRole('ADMIN')")。这通常是通过 AOP 实现的。

  • RBAC 模型:Role-Based Access Control(基于角色的访问控制),是 Spring Security 最推荐的实践。


4. 常见的安全防护技术点

Spring Security 默认帮你开启了很多“隐形”的防护:

  • CSRF (跨站请求伪造) 防护:通过校验 Token 防止第三方网站伪造你的请求。

  • CORS (跨域资源共享):配置允许哪些域名的前端访问后端接口。

  • Session 管理:防止 Session 并发登录(比如同一个账号只能一人在线)、Session 固定攻击防护。

  • 安全响应头:自动添加 X-Content-Type-OptionsX-Frame-Options(防止点击劫持)等 HTTP 头。


5. 现代扩展:OAuth2 与 JWT

在分布式或微服务架构中,传统的 Session 往往不够用:

  • OAuth2 / OpenID Connect:用于第三方登录(微信、GitHub 登录)或者微服务间的授权。

  • JWT (JSON Web Token):无状态认证。Spring Security 可以通过自定义过滤器来解析请求头中的 Authorization: Bearer <token>


6. 总结:技术选型建议

场景 推荐技术点
传统单体项目 表单登录 + Session + Thymeleaf/JSP。
前后端分离 (Vue/React) 禁用 CSRF + JWT 过滤器 + Redis 存储 Token。
微服务架构 Spring Cloud Security + OAuth2 (Resource Server)。

既然聊到了 Spring Security,你目前是在处理前后端分离的登录逻辑(如 JWT),还是在做基于角色的传统权限管理?我可以针对性地给你一个配置类的模板。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-03-23发表,共计1780字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)