Spring Security 是一个灵活且强大的工具,可以帮助你构建安全可靠的Spring应用程序。它不仅简化了认证和授权的过程,而且还提供了丰富的特性和扩展点,使得开发者可以根据项目的独特需求定制安全策略。无论是小型的内部工具还是大型的企业级应用,Spring Security都能提供必要的安全保障。

001 || SpringSecurity是什么

Spring Security是一个强大的、可定制的身份验证和访问控制框架,它是为基于Java的Spring应用程序设计的安全框架。

它提供了全面的安全服务,包括不限于:

  • 认证(Authentication):确认用户身份,即验证用户提供的凭证(如用户名和密码)是否正确。
  • 授权(Authorization):决定已认证的用户是否有权限执行某些操作或访问特定资源。

Spring Security构建在Spring框架之上,可以轻松集成到任何基于Spring的应用程序中,并且支持多种安全协议和技术,如OAuth2、JWT(JSON Web Tokens)、LDAP等。

002 || 作用

【1】保护Web应用:通过配置HTTP请求的安全策略来保护Web应用程序,例如限制对某些URL的访问。

【2】管理用户认证:提供多种方式来处理用户登录,包括表单登录、基本认证、记住我功能等。

【3】实施访问控制:允许开发者定义细粒度的访问规则,以确保只有授权用户才能访问敏感数据或执行关键操作。

【4】防止常见的共计:内置防御机制对抗跨站脚本共计(XSS)、跨站请求伪造(CSRF)、点击劫持(Clickjacking)等常见安全威胁。

【5】支持多样的认证机制:除了传统的用户名/密码认证外,还支持社交登录(如Google、Facebook)、双因素认证等现代认证方式。

003 || 如何使用

要在Spring Boot项目中使用Spring Security,通常需要完成以下几个步骤:

(1)添加依赖

首先,在pom.xmlbuild.gradle文件中添加Spring Security Starter依赖。以Maven项目为例,则为:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>

默认启动Springboot项目之后,会在控制台显示默认用户user的临时密码

在浏览器准备访问 localhost:8080/hello 时,自动跳转到localhost:8080/login页面

(2)配置安全性

可以通过Java配置类或YAML/Properties文件来进行Spring Security相关配置。

下面是一个简单的Java配置示例,它允许匿名访问/hello路径,而其他所有请求都需要认证。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain; @Configuration
@EnableWebSecurity
public class SecurityConfig { @Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/hello").permitAll() // 允许所有人访问 /hello
.anyRequest().authenticated() // 所有其他请求都需要认证
.and()
.formLogin(); // 启用表单登录
return http.build();
}
}

(3)创建用户详情服务(可选)

自定义用户存储和服务,比如从数据库加载用户信息,需要实现UserDetailsService接口并覆盖loadUserByUsername方法。然后将这个实现注册为SpringBean

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service; @Service
public class CustomUserDetailsService implements UserDetailsService { @Autowired
private UserRepository userRepository; @Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// 根据用户名查找用户实体,并将其转换为Spring Security的UserDetails对象
return userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
}
}

(4)定义用户和角色(可选)

通过内存中的用户配置快速设置一些测试用户及其角色。这对于开发阶段非常有用:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder; @Configuration
public class SecurityConfiguration { @Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password(passwordEncoder().encode("password")).roles("USER")
.and()
.withUser("admin").password(passwordEncoder().encode("admin")).roles("ADMIN");
} @Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}

(5)自定义登录页面(可选)

默认情况下,Spring Security会提供一个简易的登录页面。如果想要创建自己的登录界面,可以通过覆盖默认的登录路径来实现:

http
.formLogin()
.loginPage("/login") // 指定自定义登录页面的URL
.permitAll(); // 允许所有人访问登录页面

同时,需要创建相应的HTML模板或者JSP页面用于显示登录表单。

SpringSecurity - [01] 概述的更多相关文章

  1. kafka详解(01) - 概述

    kafka详解(01) - 概述 定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域. 消息队列 MQ传统应用场景之异步处理 使用消 ...

  2. Zookeeper详解(01) -概述

    Zookeeper详解(01) -概述 概念 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解,是一个基于观察者模式设计的分 ...

  3. 01 - 概述 VTK 6.0 迁移

    摘要 对vtk版本4和5的管道机制重新架架构的主要目的是:迁移数据对象和算法对象中的管道执行逻辑到一个新集合的类中,我们称这个集合类叫executives.分离数据和执行模型的代码后,可以双双简化修改 ...

  4. Redis数据库 01概述| 五大数据类型

    1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...

  5. Hive 01 概述、安装配置

    概述 数据仓库:是一个面向主题的.集成的.不可更新的.随时间不变化的数据集合,它用于支持企业或组织的决策分析处理. 数据仓库的结构和建立过程: 数据源 数据存储及管理 ETL Extract 提取 T ...

  6. 【OracleDB】 01 概述和基本操作

    实例概念: Oracle有一个特殊的概念 Oracle数据库 = 数据库 + Oracle文件系统 + Oracle实例 实例处理Oracle的请求,调用文件系统 然后返回结果响应给客户端 单实例和多 ...

  7. 【大数据面试】Flink 01 概述:包含内容、层次架构、运行组件、部署模式、任务提交流程、任务调度概念、编程模型组成

    一.概述 1.介绍 对无界和有界数据流进行有状态计算的分布式引擎和框架,并可以使用高层API编写分布式任务,主要包括: DataSet API(批处理):静态数据抽象为分布式数据集,方便使用操作符进行 ...

  8. Headfirst JSP 01 (概述)

    HTTP 协议 http 是tcp/ip上层协议, 如果你对这些网络协议还不是太熟悉, 下面提供一个非常简单的解释, tcp负责确保从一个网络节点向另一个网络节点发送文件能作为一个完整的文件到达目的地 ...

  9. Python学习笔记 :01概述

    Python基础 首先推荐学习Python基础的教程和书籍 视频教程推荐南京大学张莉老师在cousera上的教程用Python玩转数据 入门教程<Python基础教程> 数据挖掘教程< ...

  10. 重学C语言---01概述

    1.什么是C语言 C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点.计算机语言是从第二次世界大战以后,经历了戏剧性的发展过程.从机器语言到汇编语言和高级语言.C语言是与硬件 ...

随机推荐

  1. C/C++源码扫描系列- codeql 篇

    首发于 https://xz.aliyun.com/t/9275 概述 codeql 是一个静态源码扫描工具,支持 c, python, java 等语言,用户可以使用 ql 语言编写自定义规则识别软 ...

  2. ArkTs布局入门03——层叠布局(Stack)

    1.概述 叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局.层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈, ...

  3. 小程序 构建npm

    1. 在项目文件夹下 打开cmd 窗口,输入: npm init 一直回车即可 2. 安装模板 npm i @vant/weapp -S --production 3. 在微信开发者工具,左上角工具中 ...

  4. 使用 VS Code 徒手构建 PDF 文件

    使用 VS Code 徒手构建 PDF 文件 PDF 文件是广泛应用的页面描述文件格式,从本质上讲,文件内部的结构混合使用了文本格式描述和二进制格式描述,对于简单的文件,比如说我们今天要创建的第一个 ...

  5. Linux驱动开发笔记(七):操作系统MMU介绍,操作系统操作寄存器的原理和Demo

    前言   做过单片机的都知道,写驱动是直接代码设置和读取寄存器来控制外设实现基本的驱动功能,而linux操作系统上是由MMU(内存管理单元)来控制,MMU实现了虚拟地址与芯片物理地址的对应,设置和获取 ...

  6. Error: Application Server not specified

    在IDEA中tomcat不能运行,点开Edit Configuration发现如下图情况:tomcat图标猫上有个红叉,且下面有警告提示:Error: Application Server not s ...

  7. NJU ICS2024 PA 作业心得(三)

    NJU ICS2024 PA 作业心得(三) 需要参考的内容 RISC-V ABIs Specification:是一组规则和规范,定义了在 RISC-V 架构上编写和链接程序的方式.它确保了不同语言 ...

  8. Qt/C++最新地图组件发布/历时半年重构/同时支持各种地图内核/包括百度高德腾讯天地图

    一.前言说明 最近花了半年时间,专门重构了整个地图组件,之前写的比较粗糙,有点为了完成功能而做的,没有考虑太多拓展性和易用性.这套地图自检这几年大量的实际项目和用户使用下来,反馈了不少很好的建议和意见 ...

  9. ElasticSearch接口

    DSL语法 DSL为ES过滤数据时的语法,可用于查询.删除等操作 基本构成 默认分页查询,size默认为10.ES查询默认最大文档数量限制为10000,可通过 index.max_result_win ...

  10. CDS标准视图:预期应收 I_FutureAccountsReceivables

    视图名称:预期应收 视图类型:参数 视图代码: 点击查看代码 //Documentation about annotations can be found at http://help.sap.com ...