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 项目中被广泛使用。它提供了从认证、授权到安全防护的完整解决方案,虽然学习曲线较陡,但功能强大、扩展性强,是构建企业级安全系统的首选方案。

相关推荐
佛祖让我来巡山3 小时前
小明网站双登录系统实现——微信授权登录+用户名密码登录完整指南
oauth2·springsecurity·微信授权登录
佛祖让我来巡山20 小时前
Spring Security 鉴权流程与过滤器链深度剖析
springsecurity·authenticationmanager
佛祖让我来巡山1 天前
大型项目基于Spring Security的登录鉴权与数据权限控制完整方案
springsecurity·保姆级鉴权·大型项目登录认证
佛祖让我来巡山1 天前
Spring Security前后端分离接入流程保姆级教程
权限校验·springsecurity·登录认证
佛祖让我来巡山2 天前
Spring Security 认证流程闭环与调用链路详解
springsecurity·authenticationmanager
佛祖让我来巡山2 天前
小明的Spring Security入门到深入实战
springsecurity
佛祖让我来巡山3 天前
⚠️登录认证功能的成长过程:整体概述
安全·登录·springsecurity·登录认证·认证授权
码熔burning3 个月前
Spring Security 深度学习(六): RESTful API 安全与 JWT
安全·spring·restful·springsecurity
A尘埃3 个月前
SpringSecurity版本的不同配置
认证·springsecurity·安全配置·不同版本