开发者

最新Spring Security实战教程之Spring Security安全框架指南

目录
  • 前言
  • 什么是Spring Security?
  • 同类框架对比
  • Spring Security典型应用场景
    • 传统Web应用安全
    • 前后端分离架构
    • 微服务安全网关
  • 快速搭建安全环境
    • ❶ 创建Spring Boot项目
    • ❷ 测试安全访问
    • ❸ 实现URL身份验证
  • 结语

    前言

    随着Web应用和微服务架构的普及,作为Java开发者如何保证系统免受各种安全威胁(如未经授权的访问、数据泄露、跨站请求伪造等)成为一个我们必须要解决的问题。

    Spring Security 作为Spring 生态系统中的核心组件,通过提供认证(Authentication)与授权(Authorization)和针对常见攻击等一系列安全功能,为开发者构建安全稳定的应用提供了强有力的支持。

    什么是Spring Security?

    最新Spring Security实战教程之Spring Security安全框架指南

    官方文档:https://docs.spring.io/spring-security/reference/index.html

    Spring Security是一个基于Spring框架的强大安全解决方案,它为应用提供了一整套安全服务,主要包括以下几个方面:

    • 认证(Authentication): 确定访问者身份的过程。Spring Security编程客栈通过多种方式(如表单登录、Basic认证、OAuth2等)实现用户身份验证。
    • 授权(Authorization): 根据用户身份和权限确定资源访问级别。开发者可以通过配置或注解的方式,灵活地控制不同用户对不同资源的访问权限。
    • 防护机制: 包括防止跨站请求伪造(CSRF)、点击劫持等攻击手段,保障应用在网络攻击面前的稳定性。

    这种以拦截器和过滤器链为核心的设计,使得Spring Security能够在请求到达业务逻辑之前,先进行安全检查,从而构建出一层坚固的防护屏障。

    同类框架对比

    说到安全框架,我们就不得不提另外一个轻量级的安全管理框架 Apache Shiro ,它有三个核心组件:SubjVGmceRLZWCect, SecurityManagerRealms , Shiro 的相关内容大家可以自行学习,这里不做过多介绍了

    下面博主总结两个框架的一些对比:

    特性Spring SecurityApache Shiro
    学习曲线较陡峭易上www.devze.com
    功能完整性★★★★★★★★☆☆
    Spring生态集成原生支持需要适配
    微服务支持OAuth2/JWT需自行扩展
    社区活跃度极高一般

    通过上述的对比图,可以总结出:

    • Spring Security是一个重量级的安全管理框架;Shiro则是一个轻量级的安全管理框架
    • Spring Security 上手稍有难度,Shiro 的配置和使用比较简单
    • Shiro 依赖性低,不需要任何框架和容器,可以独立运行
    • 如果你的项目基于Spring容器,那么优先推荐Spring Security

    Spring Security典型应用场景

    传统Web应用安全

    通过配置实现URL级权限控制

    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http
                .authorizeHttpRequests(auth -> auth
                    .requestMatchers("/admin/**").hasRole("ADMIN")
                    .anyRequest().authenticated()
                )
                .formLogin(form -> form
                    .loginPage("/login")
                    .permitAll()
                );
            return http.build();
        }
    }

    前后端分离架构

    • JWT令牌自动校验
    • 无状态会话管理
    • 跨域安全配置(CORS)

    微服务安全网关

    资源服务器配置示例

    spring:
      security:
        oauth2:
          resourceserver:
            jwt:
              issuer-uri: http://auth-server:9000

    快速搭建安全环境

    以博主本机环境为例

    JDK 17+

    Spring Boot 3.4.3

    Maven 3.9+

    IDE(IntelliJ IDEA或VS Code)

    为了方便大家学习给大家提供一个官方代码案例地址:

    https://github.com/spring-projects/spring-security-samples/tree/main

    ❶ 创建Spring Boot项目

    使用 start.spring.io 生成项目,勾选以下依赖:

    最新Spring Security实战教程之Spring Security安全框架指南

    <dependencies>
        <dependency>
      http://www.devze.com      <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
    </dependencies>

    ❷ 测试安全访问

    创建测试控制器,我们希望访问 /public 无需验证身份,访问 /private 需要用户登录

    @RestController
    public class DemoController {
        @GetMapping("/public")
        public String publicApi() {
            return "无需认证的公开接口";
        }
        @GetMapping("/private")
        public String privateApi() {
            return "需要登录的私有接口";
        }
    }

    现在我们不管访问哪一个接口地址,均会跳出一个登陆页

    最新Spring Security实战教程之Spring Security安全框架指南

    账号默认 user ,密码由Spring Security 自动帮我们生成,观察控制台

    最新Spring Security实战教程之Spring Security安全框架指南

    ❸ 实现URL身份验证

    通过上述测试要求,目前我们访问 /public 还是会出现登录要求,接下来我们创建一个陪你类,以实现这个需求

    @Configuration
    public class BasicSecurityConfig {
        // 配置安全策略
        @Bean
        public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
            http.
                    authorizeHttpRequests(authorize -> authorize
                            .requestMatchers("/public/**").permitAll()
                            .anyRequest().authenticated()
                    )
                    .formLogin(withDefaults())
                    .logout(withDefaults());
            return http.build();
        }
    }

    现在我们继续访问 /public 发现已经不再需要身份验证了,可以直接访问测试

    最新Spring Security实战教程之Spring Security安全框架指南

    访问 /private 需要登录验android证,登陆后即可访问

    最新Spring Security实战教程之Spring Security安全框架指南

    上述配置文件中

    requestMatchers(“/public/**”).permitAll() 表明放行public访问路径下所有接口

    formLogin(withDefaults()) 采用默认的登录处理

    logout(withDefaults()) 采用默认的登出处理

    结语

    本章节主要带领大家认识Spring Security安全框架,并构建一个简单的 Spring Boot + Spring Security 的项目让大家有一个大致了解。

    在接下来的专栏中,我们将逐步深入 Spring Security 的各个技术细节,带你从入门到精通,全面掌握这一安全技术的方方面面。欢迎继续关注!

    下一章节:最新Spring Security实战教程(二)表单登录定制到处理逻辑的深度改造

    到此这篇关于最新Spring Security实战教程之初识Spring Security安全框架的文章就介绍到这了,更多相关Spring Security安全框架内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜