SpringSecurity-SpringSecurity入门介绍

Spring Security 是一个功能强大且高度可定制的 Java 安全框架 ,主要用于为基于 Spring 的应用程序提供 身份认证(Authentication)访问控制(Authorization) 功能。它广泛应用于 Spring Boot 项目中,用于保护 Web 请求、方法调用、REST API 等。


一、核心功能

1. 身份认证(Authentication)

  • 用户登录验证(用户名、密码)
  • 支持多种认证方式:表单登录、OAuth2、JWT、LDAP、SAML 等
  • 登录成功/失败处理逻辑

2. 授权(Authorization)

  • URL 级别访问控制(如 /admin/** 需要 ROLE_ADMIN
  • 方法级别权限控制(使用 @PreAuthorize@Secured 注解)
  • 支持角色(Role)和权限(Authority)管理

3. 安全防护

  • 防止 CSRF(跨站请求伪造)
  • 防止 Session 固定攻击
  • 支持安全头设置(如 HSTS、X-Frame-Options)

4. 安全上下文(SecurityContext)

  • 使用 SecurityContextHolder 存储当前用户的安全信息(如登录用户)
  • 可通过 Authentication 获取当前用户信息

二、核心组件

组件 说明
SecurityFilterChain 安全过滤链,定义请求的安全规则
UserDetailsService 加载用户信息(如从数据库加载)
PasswordEncoder 密码加密与验证
AuthenticationManager 认证管理器,处理登录认证逻辑
GrantedAuthority 用户拥有的权限或角色
SecurityContext 当前请求的安全上下文,包含用户信息

三、Spring Security 的基本流程

plaintext 复制代码
用户请求 → SecurityFilterChain → 认证(登录)→ 授权(权限判断)→ 允许/拒绝访问

四、Spring Boot 中的典型配置(Java Config)

java 复制代码
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .formLogin(withDefaults())
            .logout(logout -> logout.permitAll())
            .csrf(csrf -> csrf.disable()); // 开发阶段可关闭 CSRF

        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();

        UserDetails admin = User.withDefaultPasswordEncoder()
            .username("admin")
            .password("password")
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }
}

五、Spring Security 与 Shiro 的对比

对比项 Spring Security Apache Shiro
所属生态 Spring 生态 独立框架
配置方式 Java Config / XML Java Config / INI
易用性 复杂但强大 简单易用
集成难度 适合 Spring 项目 可用于任意 Java 项目
功能 更全面(OAuth2、CSRF、JWT 等) 功能较基础
社区支持 Spring 官方维护 Apache 项目

六、常见使用场景

  • 用户登录认证(表单、JWT、OAuth2)
  • 前后端分离项目中的 Token 认证(如 JWT)
  • 接口级别的权限控制(如 /api/user 需要 ROLE_USER
  • 管理后台的权限控制(如 /admin/** 需要管理员角色)
  • 安全审计、日志记录、登录失败限制等

七、常用注解(需启用 @EnableMethodSecurity

java 复制代码
@EnableMethodSecurity
public class SecurityConfig { ... }
注解 说明
@PreAuthorize("hasRole('ADMIN')") 方法执行前进行权限判断
@PostAuthorize 方法执行后进行权限判断
@Secured("ROLE_ADMIN") 支持角色级别的方法控制
@EnableMethodSecurity 启用方法级别安全控制

八、总结

Spring Security 是目前 Java Web 安全领域最主流的框架,尤其在 Spring Boot 项目中被广泛使用。它提供了从认证、授权到安全防护的完整解决方案,虽然学习曲线较陡,但功能强大、扩展性强,是构建企业级安全系统的首选方案。

相关推荐
空太Jun18 天前
Spring Security 角色权限&资源权限配置 学习笔记
笔记·学习·spring·mybatis·security·springsecurity
九皇叔叔22 天前
003-SpringSecurity-Demo 统一响应类
java·javascript·spring·springsecurity
九皇叔叔23 天前
004-SpringSecurity-Demo 拆分环境
java·springboot3·springsecurity
九皇叔叔23 天前
006-SpringSecurity-Demo 跨域(CORS)配置
java·springboot3·springsecurity·跨域·cors
九皇叔叔23 天前
005-SpringSecurity-Demo 配置外部文件映射
java·springboot·文件·springsecurity
九皇叔叔24 天前
001-SpringSecurity-Demo 创建项目
java·springboot·springsecurity
创梦流浪人1 个月前
soli-admin一款开箱即用的RBAC后台项目
java·spring boot·vue3·springsecurity
浑水摸鱼仙君1 个月前
SpringSecurity和Flux同时使用报未认证问题
java·ai·flux·springsecurity·springai
知识即是力量ol3 个月前
一次完整的 Spring Security JWT 鉴权链路解析
java·后端·spring·鉴权·springsecurity
佛祖让我来巡山5 个月前
小明网站双登录系统实现——微信授权登录+用户名密码登录完整指南
oauth2·springsecurity·微信授权登录