spring-security-学习笔记-03-spring-security快速上手

spring-security-学习笔记-03-spring-security快速上手

文章目录

  • spring-security-学习笔记-03-spring-security快速上手
  • 3-spring-security快速上手
    • 3.1 Spring Security介绍
    • 3.2 创建工程
      • 3.2.1 创建maven工程
      • 3.2.2 spring容器配置
      • 3.2.3 Servlet Context配置
      • 3.2.4 加载 Spring容器
    • 3.3认证
      • 3.3.1 认证页面
      • 3.3.2.安全配置
      • 3.3.2.Spring Security初始化
      • 3.2.3.默认根路径请求
      • 3.2.4.认证成功页面
      • 3.2.5 测试
    • 3.4 授权
    • 3.5 小结

3-spring-security快速上手

3.1 Spring Security介绍

  Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它 是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入spring security更是十分简单,使用Spring Security 减少了为企业系统安全控制编写大量重复代码的工作。

3.2 创建工程

3.2.1 创建maven工程

在这里插入图片描述

pom文件

在security-springmvc的基础上增加spring-security的依赖:

<dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-web</artifactId><version>5.1.4.RELEASE</version>
</dependency>

3.2.2 spring容器配置


@Configuration //相当于applicationContext.xml
@ComponentScan(basePackages = "com.itheima.security.springmvc",excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = Controller.class)})
public class ApplicationConfig {//在此配置除了Controller的其它bean,比如:数据库链接池、事务管理器、业务bean等。
}

3.2.3 Servlet Context配置

@Configuration//就相当于springmvc.xml文件
@EnableWebMvc
@ComponentScan(basePackages = "com.itheima.security.springmvc",includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,value = Controller.class)})
public class WebConfig implements WebMvcConfigurer {//视频解析器@Beanpublic InternalResourceViewResolver viewResolver(){InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/view/");viewResolver.setSuffix(".jsp");return viewResolver;}@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("redirect:/login");}}

3.2.4 加载 Spring容器

  在init包下定义Spring容器初始化类SpringApplicationInitializer,此类实现WebApplicationInitializer接口, Spring容器启动时加载WebApplicationInitializer接口的所有实现类。

public class SpringApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {//spring容器,相当于加载 applicationContext.xml@Overrideprotected Class<?>[] getRootConfigClasses() {return new Class[]{ApplicationConfig.class, WebSecurityConfig.class};}//servletContext,相当于加载springmvc.xml@Overrideprotected Class<?>[] getServletConfigClasses() {return new Class[]{WebConfig.class};}//url-mapping@Overrideprotected String[] getServletMappings() {return new String[]{"/"};}
}

3.3认证

3.3.1 认证页面

springSecurity默认提供认证页面,不需要额外开发
在这里插入图片描述

3.3.2.安全配置

spring security提供了用户名密码登录、退出、会话管理等认证功能,只需要配置即可使用。

1 ) 在config包下定义WebSecurityConfig,安全配置的内容包括:用户信息、密码编码器、安全拦截机制。

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {//定义用户信息服务(查询用户信息)@Override@Beanpublic UserDetailsService userDetailsService(){InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();manager.createUser(User.withUsername("zhangsan").password("123").authorities("p1").build());manager.createUser(User.withUsername("lisi").password("456").authorities("p2").build());return manager;}//密码编码器@Beanpublic PasswordEncoder passwordEncoder(){return NoOpPasswordEncoder.getInstance();}//安全拦截机制(最重要)@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/r/r1").hasAuthority("p1").antMatchers("/r/r2").hasAuthority("p2").antMatchers("/r/**").authenticated()//所有/r/**的请求必须认证通过.anyRequest().permitAll()//除了/r/**,其它的请求可以访问.and().formLogin()//允许表单登录.successForwardUrl("/login-success");//自定义登录成功的页面地址}
}

userDetailsService()方法中,我们返回了一个UserDetailsService给spring容器,Spring Security会使用它来获取用户信息。我们暂时使用InMemoryUserDetailsManager实现类,并在其中分别创建了zhangsan、lisi两个用 户,并设置密码和权限。

而在configure()中,我们通过HttpSecurity设置了安全拦截规则,其中包含了以下内容:
在这里插入图片描述

3.3.2.Spring Security初始化

在这里插入图片描述

3.2.3.默认根路径请求

在WebConfig.java中添加默认请求根路径跳转到/login,此url为spring security提供:


//默认Url根路径跳转到/login,此url为spring security提供
@Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/").setViewName("redirect:/login");}

spring security默认提供的登录页面。

3.2.4.认证成功页面

在安全配置中,认证成功将跳转到/login-success,代码如下:
在这里插入图片描述
spring security支持form表单认证,认证成功后转向/login-success。
LoginController中定义/login-success:

 @RequestMapping(value = "/login-success",produces = {"text/plain;charset=UTF-8"})public String loginSuccess(){return " 登录成功";}

3.2.5 测试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、退出 后再访问资源自动跳转到登录页面

3.4 授权

  实现授权需要对用户的访问进行拦截校验,校验用户的权限是否可以操作指定的资源,Spring Security默认提供授 权实现方法。

在LoginController添加/r/r1或/r/r2

/*** 测试资源1* @return*/@GetMapping(value = "/r/r1",produces = {"text/plain;charset=UTF-8"})public String r1(){return " 访问资源1";}/*** 测试资源2* @return*/@GetMapping(value = "/r/r2",produces = {"text/plain;charset=UTF-8"})public String r2(){return " 访问资源2";}

在安全配置类WebSecurityConfig.java中配置授权规则:
在这里插入图片描述
在这里插入图片描述

3.5 小结

  通过快速上手,咱们使用Spring Security实现了认证和授权,Spring Security提供了基于账号和密码的认证方式, 通过安全配置即可实现请求拦截,授权功能,Spring Security能完成的不仅仅是这些。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

所有的科学知识都是不确定的

理查德菲利普费曼&#xff08;Richard Phillips Feynman&#xff09;&#xff0c;1918年5月11日—1988年2月15日&#xff0c;美国著名理论物理学家&#xff0c;1965年&#xff0c;因在量子电动力学方面的成就而获得诺贝尔物理学奖。来源&#xff1a;科学技术哲学一、不存在决定…

2.1.1物理层基本概念

2.1.1物理层基本概念 文章目录2.1.1物理层基本概念

神经网络为大脑如何运作提供新见解

来源&#xff1a;ScienceAI编辑&#xff1a;萝卜皮单细胞空间转录组学&#xff08;sc-ST&#xff09;有望阐明复杂组织的结构方面。此类分析需要通过将 sc-ST 数据集中的细胞类型与单细胞 RNA-seq 数据集集成来对它们进行建模。然而&#xff0c;这种整合并非微不足道&#xff0…

2.1.2数据通信基础知识

文章目录2.1.2数据通信基础知识0 思维导图1. 典型的数据通信模型2 数据通信相关术语3 三种通信方式4 两种数据传输方式2.1.2数据通信基础知识 0 思维导图 1. 典型的数据通信模型 2 数据通信相关术语 3 三种通信方式 4 两种数据传输方式

一文读懂MEMS技术4大主要分类及应用领域

来源&#xff1a;传感器专家网MEMS传感器是在微电子技术基础上发展起来的多学科交叉的前沿研究领域。经过四十多年的发展&#xff0c;已成为世界瞩目的重大科技领域之一。它涉及电子、机械、材料、物理学、化学、生物学、医学等多种学科与技术&#xff0c;具有广阔的应用前景。…

2.1.3码元、波特、速率、带宽

2.1.3码元、波特、速率、带宽 文章目录2.1.3码元、波特、速率、带宽0 思维导图1.码元2. 速率&#xff0c;波特&#xff0c;带宽练习题0 思维导图 1.码元 2. 速率&#xff0c;波特&#xff0c;带宽 练习题

模拟电路人工智能神经网络的前景

ISTOCKPHOTO来源&#xff1a;IEEE电气电子工程师未来驱动人工智能的一些最佳电路可能是模拟电路&#xff0c;而不是数字电路&#xff0c;世界各地的研究团队正在越来越多地开发支持此类模拟人工智能的新设备。在驱动AI当前爆炸的深层神经网络中&#xff0c;最基本的计算是乘法累…

CSS-盒子模型

CSS盒子模型 盒子模型解释 元素在页面中显示成一个方块&#xff0c;类似一个盒子&#xff0c;CSS盒子模型就是使用实现中盒子来做比喻&#xff0c;帮助我们设置元素对应的样式。盒子模型示意图如下&#xff1a; 把元素叫做盒子&#xff0c;设置对应的样式分别为&#xff1a; 盒…

2.1.4 ★(考察计算能力)奈氏准则和香农定理

2.1.4 奈氏准则和香农定理 文章目录2.1.4 奈氏准则和香农定理0.思维导图1. 失真2. 失真的一种现象--码间串扰3.奈氏准则(奈奎斯特定理)4. 奈氏准则(奈奎斯特定理)-练5. 香农定理6. 香农定理-例题7. “nice”和“香浓”对比0.思维导图 1. 失真 2. 失真的一种现象–码间串扰 3.奈…

未来哲学的六个问题域

来源&#xff1a;中科院哲学所作者&#xff1a;约翰R塞尔&#xff08;John R. Searle&#xff09;译者&#xff1a;GTY约翰塞尔生于1932年&#xff0c;当代著名哲学家&#xff0c;现为美国加州大学伯克利分校Slusser哲学教授&#xff0c;在语言哲学、心灵哲学和社会哲学领域贡献…

2.2_ 4_ FCFS、SJF、 HRRN调度算法

文章目录知识总览先来先服务短作业优先高响应比优先知识回顾和重要考点知识总览 先来先服务 短作业优先 高响应比优先 知识回顾和重要考点

当AI学会高数:解题、出题、评分样样都行

来源&#xff1a;AI科技评论“高等数学里程碑式的研究”&#xff0c;114页论文让AI文理双修&#xff0c;也许不久后机器出的高数试卷就会走进高校课堂&#xff0c;这下可以说“高数题不是人出的了”。人工智能虽然给我们带来了诸多便利&#xff0c;但也不免受到了各种质疑。在互…

2.3_ 1_ 进程同步、进程互斥

2.3_ 1_ 进程同步、进程互斥 文章目录2.3_ 1_ 进程同步、进程互斥1.知识概览2.什么是进程同步&#xff1f;2.什么是进程互斥3.知识回顾1.知识概览 2.什么是进程同步&#xff1f; 2.什么是进程互斥 3.知识回顾

IEEE Fellow李世鹏 :人工智能与机器人前沿研究之思考

来源&#xff1a;AI科技评论作者&#xff1a;维克多编辑&#xff1a;青暮2021年12月9日&#xff0c;由粤港澳大湾区人工智能与机器人联合会、雷峰网合办的第六届全球人工智能与机器人大会&#xff08;GAIR 2021&#xff09;在深圳正式启幕&#xff0c;140余位产学领袖、30位Fel…

2.3.2. 进程互斥的软件实现方法

2.3.2. 进程互斥的软件实现方法 文章目录2.3.2. 进程互斥的软件实现方法1.知识总览2.单标志法3.双标志先检查法4.双标志后检查法5. perterson算法6. 知识回顾1.知识总览 2.单标志法 3.双标志先检查法 4.双标志后检查法 5. perterson算法 6. 知识回顾

哲学的终极解释:48张图了解48种主义

来源&#xff1a;今日头条编辑&#xff1a;nhyilin哲学家建立了事物的基本概念&#xff0c;我们在讨论中遵循它&#xff0c;有时误用它&#xff0c;有时颠覆它。以下48个基本概念常常出现在公共讨论里&#xff0c;伦敦设计师Genis Carreras用最简单的线条、形状和色块对它们进行…

2.1.5编码与调制(1)

文章目录2.1.5编码与调制(1)1.基带信号与宽带信号2. 编码与调制2.1.5编码与调制(1) 1.基带信号与宽带信号 2. 编码与调制

改名Meta俩月,脸书放弃虚拟现实操作系统:负责人跳槽谷歌

来源&#xff1a;机器学习研究组订阅元宇宙&#xff0c;到头来还得是安卓系统&#xff1f;这些年来&#xff0c;facebook 在增强现实和虚拟现实领域投入了大量资金。扎克伯格甚至已经把公司名称改成了 Meta&#xff0c;认为元宇宙将是公司未来的主营业务&#xff0c;不过理想很…

2.2物理层传输介质

2.2物理层传输介质 文章目录2.2物理层传输介质1. 传输介质和分类2.导向性传输介质--1.双绞线3.导向性传输介质--2.同轴电缆4.非导向性传输介质思维导图1. 传输介质和分类 2.导向性传输介质–1.双绞线 3.导向性传输介质–2.同轴电缆 4.非导向性传输介质 思维导图

C#拼装JSON数组简易方法

下面是我们想要拼接出来的JSON字符串&#xff0c;返回给前台 1 {"success":"true","msg":"","data":[{"macName":"正面预拼装机","state":1.0},{"macName":"正面拼板压力架&q…