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

相关推荐
1.01^10009 天前
[7-01-01].第01章:安全与权限 - 核心概念
springsecurity
xiezhr2 个月前
SpringBoot3整合SpringSecurity6(五)自定义登陆页面
java·spring·springboot3·springsecurity
去哪里吃鱼3 个月前
自定义Spring Authorization Server登录页
springsecurity·spring authorization server·springauthorizationserver
xiezhr3 个月前
SpringBoot3整合SpringSecurity6(二)SpringSecurity默默的干了些啥
java·spring boot·springboot3·springsecurity
skywsp3 个月前
SpringBoot集成国密算法
spring boot·国密·springsecurity
KNeeg_3 个月前
SpringSecurity框架入门
java·spring·spring cloud·springsecurity
何包蛋H4 个月前
SpringSecurity + OAuth2 限制一个用户(同端互斥)登录
java·springsecurity·oauth2.0
代码代码快快显灵4 个月前
使用 Spring Security的一些常用功能
java·前端·spring·springsecurity