快速入门 Spring Security

1 认证授权

  • 认证(Authentication):可以理解为登录,验证访问者的身份。包括用户名密码认证、手机号短信验证码认证、指纹识别认证、面容识别认证等等
  • 授权(Authorization):授权发生在系统完成身份认证之后,最终会授予你访问资源(如信息,文件,数据库等等)的权限,授权决定了你访问系统的能力以及达到的程度,比如只有拿到了操作用户的授权,才可以管理用户
1.1 基于session的认证

交互流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话)中,发给客户端的sesssion_id存放到 cookie中,这样用户客户端请求时带上 session_id 就可以验证服务器端是否存在 session 数据,以此完成用户的合法校验,当用户退出系统或session过期销毁时,客户端的session_id 也就无效了。

在这里插入图片描述

1.2 基于Token的认证

交互流程是,用户认证成功后,服务端生成一个token【令牌】[唯一字符串]【uuid,jwt】发给客户端,客户端可以放到 cookie 或sessionStorage等存储中,每次请求时带上token,服务端收到token通过验证后即可确认用户身份。

对比总结

基于session的认证方式由servlet规范定制,服务端要存储session信息需要占用内存资源,客户端需要支持cookie;

基于token的方式则一般不需要服务端存储token,并且不限制客户端的存储方式cookie sessionStorage LocalStorage Vuex。

如今移动互联网时代更多类型的客户端[pC ,android,IOS,]需要接入系统,系统多是采用前后端分离的架构进行实现,所以基于token的方式更适合。

2 Spring Security 简介

Spring Security 提供了对身份认证、授权和针对常见漏洞的保护的全面支持,可以轻松地集成到任何基于 Spring 的应用程序中。

2.1 什么是spring security?

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Sprirg应用上下文中配置的Bean,充分利用了Spring IoC [],DI(控制反转Inversion of Control ,DI:Dependency Injection依赖主入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。–以上解释来源于百度百科。
总之,SpringSecurity 是一个安全框架。可以帮我们完成认证,密码加密,授权,rememberme的功能

2.2 快速入门springsecurity

引入依赖

 <!--引入springsecurity的依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

创建接口资源

@RestController
public class HelloController {@GetMapping("/hello")public String hello(){return "Hello world";}
}

首次启动项目并访问资源

在这里插入图片描述

发现 帮你跳转到登录页面。 因为springsecurity包含了很多过滤器,认证过滤器发现你没有登录就访问资源。默认调整到它内置的登录页面

在这里插入图片描述

账号为: user

密码:

在控制台会显示

在这里插入图片描述

3 自定义账号密码

#定义账号和密码 一旦自定义了账号和密码 原来自带的就不存在了 这里只能定义一个账号和密码
spring.security.user.name=admin
spring.security.user.password=123456

4 定义多用户–基于内存

@Configuration
public class mysecurity  extends WebSecurityConfigurerAdapter {//密码加密@Beanpublic PasswordEncoder passwordEncoder(){PasswordEncoder passwordEncoder=new BCryptPasswordEncoder();return passwordEncoder;}@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {auth//基于内存完成认证和授权.inMemoryAuthentication()//表示用户名.withUser("yyy")//表示密码.password(passwordEncoder().encode("123456"))//当前用户具有的角色.roles("admin")//表示具有的权限.authorities("user:select","user:delete","user:insert","user:update")//多个用户.and().withUser("一字符").password(passwordEncoder().encode("123456")).roles("user").authorities("user:select","user:export");}

注意:上述需要使用密码加密(hash)

5 密码加密器

分成两种类型: 对称加密和非对称加密

对称加密:表示加密和解密使用同一把密钥。

非对称加密: 表示加密和解密不是使用同一个密钥。 md5 hash

public class Test {public static void main(String[] args) {PasswordEncoder passwordEncoder=new BCryptPasswordEncoder();//用于加密String encode = passwordEncoder.encode("123456");String encode2 = passwordEncoder.encode("123456");String encode3 = passwordEncoder.encode("123456");System.out.println(encode);System.out.println(encode2);System.out.println(encode3);//密码匹配--并不是解密boolean matches = passwordEncoder.matches("123456", encode2);System.out.println("是否密码正确:"+matches);}
}

6 获取当前登录用户的信息

 // springsecurity默认把当前用户的信息保存SecurityContext上下文中.
@GetMapping("info")public Authentication info(){//获取SecurityContext对象SecurityContext context = SecurityContextHolder.getContext();//把用户得到信息封装到Authontication类中--用户名---角色以及权限---状态Authentication authentication = context.getAuthentication();UserDetails principal = (UserDetails) authentication.getPrincipal();System.out.println(principal.getUsername());return authentication;}

7 security零散配置

    @Overrideprotected void configure(HttpSecurity http) throws Exception {http.formLogin()//登录页面;.loginPage("/login.html")//登录的处理路径 默认 /login.loginProcessingUrl("/login").successForwardUrl("/index") //登录成功转发的路径 必须为post请求.failureUrl("/fail.html")//.failureForwardUrl("/fail") //登录失败转发的路径 必须为post请求.permitAll(); //上面的请求路径无需认证http.csrf().disable();//禁用跨域伪造请求的过滤器//除了上的请求,其他请求都需要认证http.authorizeRequests().anyRequest().authenticated();}

8 Spring Security新用法

在config配置类中发生了变化

@Configuration
@EnableWebSecurity
public class MySecurityConfig {@Beanpublic PasswordEncoder passwordEncoder(){PasswordEncoder passwordEncoder=new BCryptPasswordEncoder();return passwordEncoder;}@Beanpublic UserDetailsService myconfigure() throws Exception {return new InMemoryUserDetailsManager(User.withUsername("ddd").password(passwordEncoder().encode("123456")).roles("admin").authorities("user:list").build());}@Beanpublic SecurityFilterChain myconfigure2(HttpSecurity http)throws Exception{http.formLogin(form->form.loginPage("/login.html").successForwardUrl("/success").loginProcessingUrl("/login").permitAll());http.csrf(item->item.disable());http.authorizeHttpRequests(item->item.anyRequest().authenticated());return http.build();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3279844.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

springboot校园商店配送系统-计算机毕业设计源码68448

摘要 本文详细阐述了基于Spring Boot框架的校园商店配送系统的设计与实现过程。该系统针对校园内的用户需求&#xff0c;整合了用户注册与登录、商品浏览与购买、订单管理、配送追踪、用户反馈收集以及后台管理等功能&#xff0c;为校园内的普通用户、商家、配送员和管理员提供…

用深度学习改进乳腺癌MRI诊断| 文献速递--AI辅助的放射影像疾病诊断

Title 题目 Improving breast cancer diagnostics with deep learning for MRI 用深度学习改进乳腺癌MRI诊断 01 文献速递介绍 乳腺磁共振成像&#xff08;MRI&#xff09;是一种检测乳腺癌的高度敏感的方式&#xff0c;报告的敏感性超过80%。传统上&#xff0c;其在筛查…

教程系列4 | 趋动云『社区项目』极速体验 LivePortrait 人脸表情“移花接木”大法

LivePortrait LivePortrait 由快手可灵大模型团队开源&#xff0c;只需 1 张原图就能生成动态视频。 LivePortrait 的核心优势在于其卓越的表情"迁移"技术&#xff0c;能够令静态图像中的人物瞬间焕发活力&#xff0c;无论是眨眼、微笑还是转头&#xff0c;皆栩栩如…

spaCy语言模型下载

spaCy 是一个基于 Python 编写的开源自然语言处理&#xff08;NLP&#xff09;库&#xff0c;它提供了一系列的工具和功能&#xff0c;用于文本预处理、文本解析、命名实体识别、词性标注、句法分析和文本分类等任务。 spaCy支持多种语言模型对文本进行处理&#xff0c;包括中文…

JAVA基础 - 异常处理

目录 一. 简介 二. 受检异常 三. 非受检异常 四. 自定义异常类 一. 简介 异常处理是 Java 编程中的一个重要概念&#xff0c;它用于处理程序运行时可能出现的不正常情况。 在 Java 中&#xff0c;异常可以分为两类&#xff1a;受检异常&#xff08;Checked Exception&…

一篇长文搭建AI大模型应用平台架构

在研究了6家知名公司如何部署生成式AI应用程序后&#xff0c;注意到它们的平台有很多相似之处。概述了生成式AI大模型应用平台的常见组件、它们的作用以及它们的实现方式。尽力保持架构的通用性&#xff0c;但某些应用程序可能会有所不同。 Generative AI大模型应用平台整体架…

【Vulnhub系列】Vulnhub_pipe 靶场渗透(原创)

【Vulnhub系列靶场】Vulnhub-pipe 靶场渗透 原文转载已经过授权 原文链接&#xff1a;Lusen的小窝 - 学无止尽&#xff0c;不进则退 (lusensec.github.io) 一、环境配置 1、解决IP扫描不到问题 2、打开虚拟机&#xff0c;并修改网络连接模式为【NAT】即可 二、信息收集 1…

树状机器学习模型综述(含python代码)

树状机器学习模型综述 树状模型是机器学习中一种非常重要的算法类别&#xff0c;因其直观的结构和良好的可解释性而广泛应用于分类和回归任务。本文将综述几种常见的树状模型&#xff0c;包括决策树、随机森林、LightGBM、XGBoost和CatBoost&#xff0c;讨论它们的原理、用途以…

自适应降噪与沉浸音效的结合,戴上QCY MeloBuds Pro,开启静谧音乐之旅

现在蓝牙耳机的选择真是太丰富了&#xff0c;其中性价比高的还是国产品牌&#xff0c;我之前用过几款QCY的耳机&#xff0c;感觉不管是设计&#xff0c;还是音质&#xff0c;以及佩戴的舒适度&#xff0c;都要比同价位的耳机更出色一些。最近我又新入手了一款 MeloBuds Pro&…

【QT 5-控件对比-小技巧-控件显示文字和更改文字-label控件-lineEdit控件-记录】

【QT 5-控件对比-小技巧-控件显示文字和更改文字-label控件-lineEdit控件-记录】 1、前言2、环境3、控件说明&#xff08;1&#xff09;QLabel&#xff08;2&#xff09;QLineEdit 4、控件代码说明&#xff08;1&#xff09;第一种控件 QLabel1-UI文件上编写2-代码控制3-完全代…

java实现加水印功能

1-Word加水印 实现原理&#xff1a; ● 通过页眉页脚生成文字水印或图片水印&#xff0c;然后设置页眉页脚的高度以及旋转角度来设置水印。 源代码&#xff1a; 1、引入pom依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml…

在linux编译JsonCpp 1.9.5

编译方法 mkdir jsoncpp-Sandbox ; cd jsoncpp-Sandbox git clone https://github.com/open-source-parsers/jsoncpp.git mkdir jsoncpp-build mkdir jsoncpp-install cd ./jsoncpp-build/ cmake ../jsoncpp/ -DCMAKE_INSTALL_PREFIX/home/vis/work/SourceCode/jsoncpp-Sandbo…

智能体一键生成个性化贺卡

文章目录 一、前言二、创建智能体编辑名称头像简介人物设定开场白引导示例高级配置调试发布 三、总结 一、前言 欢迎来到节日的温馨角落&#xff01;我是您的节日贺卡助手&#xff0c;专为您打造独一无二的节日祝福。无论是温馨的问候&#xff0c;还是创意的惊喜&#xff0c;我…

【Threejs进阶教程-着色器篇】5. 2D SDF(二)圆形波纹效果

2D SDF 圆形波纹效果 关于本Shader教程前四篇地址&#xff0c;请按顺序学习本博客使用模板代码中的Shader模板绘制第一圈波纹绘制多圈波纹fract函数 让光波动起来使用uniform控制最终效果追加uniform&#xff0c;以及lil.gui控制器修改片元着色器最终效果 完整源码 关于本Shad…

leetcode日记(63)颜色分类

感觉就是排序问题&#xff1f;我使用的是时间复杂度比较高的简单粗暴排序法&#xff0c;时间复杂度O&#xff08;n^2&#xff09;。 class Solution { public:void sortColors(vector<int>& nums) {int nnums.size();for(int i0;i<n;i){for(int ji1;j<n;j){if…

鸿蒙应用框架开发【选择并查看文档与媒体文件】 本地数据与文件

选择并查看文档与媒体文件 介绍 应用使用ohos.file.picker、ohos.file.fs等接口&#xff0c;实现了picker拉起文档编辑保存、拉起系统相册图片查看、拉起视频并播放的功能。 效果预览 使用说明&#xff1a; 在首页&#xff0c;应用显示查看最近打开文件功能的跳转按钮&…

APP自动化测试 ------ 滑动和拖拽事件操作!

前言 Appium自动化测试中的常见模拟操作涵盖了多种用户交互行为&#xff0c;这些操作对于自动化测试框架来说至关重要&#xff0c;因为它们能够模拟真实用户的使用场景&#xff0c;从而验证应用程序的功能和稳定性。 今天讲解滑动和拖拽事件操作&#xff1a; 1、swipe滑动事…

java-数据结构与算法-02-数据结构-07-优先队列

1. 概念 队列是一种先进先出的结构&#xff0c;但是有些时候&#xff0c;要操作的数据带有优先级&#xff0c;一般出队时&#xff0c;优先级较高的元素先出队&#xff0c;这种数据结构就叫做优先级队列。 比如&#xff1a;你在打音游的时候&#xff0c;你的朋友给你打了个电话…

springboot短视频推荐系统-计算机毕业设计源码21503

摘 要 本论文基于协同过滤算法&#xff0c;旨在设计并实现一种基于SpringBoot框架的短视频推荐系统。该系统主要分为平台用户和管理员两类角色&#xff0c;用户可以注册、登录、浏览短视频内容&#xff0c;并根据个人兴趣收藏喜爱的视频。管理员则可以管理系统数据、用户和内容…

nginx反向代理和负载均衡+安装jdk-22.0.2

ps -aux|grep nginx //查看进程 nginx 代理 nginx代理是负载均衡的基础 主机&#xff1a;192.168.118.60 这台主机只发布了web服务&#xff0c;没有做代理的任何操作 修改一下index.html中的内容 echo "this is java web server" > /usr/local/nginx/htm…