依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>

登录认证

@Controller
public class UserController { @GetMapping("/test")
@ResponseBody
public String test(){
return "hello";
}
}

注意:导入依赖之后,访问 localhost: 8080/test 请求地址会自动跳转到 localhost: 8080/test 中,出现一个表单,需要登录后才能访问

用户名默认为 user,密码在控制台出现

将表单请求转换为弹出框请求

WebSecurityConfigurerAdapter

/**
* 定制用户认证管理器来实现用户认证
* 1. 提供用户认证所需信息(用户名、密码、当前用户的资源权)
* 2. 可采用内存存储方式,也可能采用数据库方式
*/
void configure(AuthenticationManagerBuilder auth); /**
* 定制基于 HTTP 请求的用户访问控制
* 1. 配置拦截的哪一些资源
* 2. 配置资源所对应的角色权限
* 3. 定义认证方式:HttpBasic、HttpForm
* 4. 定制登录页面、登录请求地址、错误处理方式
* 5. 自定义 Spring Security 过滤器等
*/
void configure(HttpSecurity http); /**
* 定制一些全局性的安全配置,例如:不拦截静态资源的访问
*/
void configure(WebSecurity web);

使用案例

  1. 创建配置类继承 WebSecurityConfigurerAdapter 类,实现 http 的 configure 方法
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override
protected void configure(HttpSecurity http) throws Exception {
/**
* fromLogin():表单认证
* httpBasic():弹出框认证
* authorizeRequests():身份认证请求
* anyRequest():所有请求
* authenticated():身份认证
*/
http.httpBasic()
.and()
.authorizeRequests()
// 其它任何请求访问都需要先通过认证
.anyRequest()
.authenticated();
}
}
  1. 访问地址:localhost: 8080/test,此时发现表单请求转换为弹出框请求

路径匹配器

MvcRequestMatcher

匹配规则

  1. /a:仅匹配路径/a
  2. /a/*:操作符* 会替换一个路径名。在这种情况下,它将匹配/a/b 或/a/c,而不是/a/b/c
  3. /a/**:操作符** 会替换多个路径名。在这种情况下,/a 以及/a/b 和/a/b/c 都是这个表达式的匹配项
  4. /a/{param}:这个表达式适用于具有给定路径参数的路径/a
  5. /a/{param: regex}:只有当参数的值与给定正则表达式匹配时,此表达式才应用于具有给定路径参数的路径/a

使用案例

  1. 单个请求无请求方法匹配
http.authorizeRequests()
.mvcMatchers("/hello_user").hasRole("USER")
.mvcMatchers("/hello_admin").hasRole("ADMIN");

如果使用角色为“USER”的用户来访问“/hello_admin”端点,那么会出现禁止访问的情况,因为“/hello_admin”端点只有角色为“ADMIN”的用户才能访问

注意:没有被 MVC 匹配器所匹配的端点,其访问不受任何的限制,效果相当于如下所示的配置

http.authorizeRequests()
.mvcMatchers("/hello_user").hasRole("USER")
.mvcMatchers("/hello_admin").hasRole("ADMIN");
.anyRequest().permitAll();
  1. 单个请求有请求方法匹配

如果一个 Controller 中存在两个路径完全一样的 HTTP 端点,可以把 HTTP 方法作为一个访问的维度进行控制

http.authorizeRequests()
.mvcMatchers(HttpMethod.POST, "/hello").authenticated()
.mvcMatchers(HttpMethod.GET, "/hello").permitAll()
.anyRequest().denyAll();
  1. 多个路径匹配
http.authorizeRequests()
.mvcMatchers("/test/xiao","/test/giao","/test/a","/test/a/b").hasRole("ADMIN");
//可以简化为以下方式
http.authorizeRequests()
.mvcMatchers("/test/**").hasRole("ADMIN");
  1. 带有路径变量匹配
@GetMapping("/product/{code}")
public String productCode(@PathVariable String code){
return code;
}
http.authorizeRequests()
.mvcMatchers("/product/{code:^[0-9]*$}").permitAll();

此时调用端点,假设 code = 1234a,不符合全部都是数字,报 401;然后再次调用端点,code = 12345,发现调用通过

AntPathRequestMatcher

Ant 匹配器的表现形式和使用方法与前面介绍的 MVC 匹配器非常相似

使用方法:

  1. antMatchers(String patterns)
  2. antMatchers(HttpMethod method)
  3. antMatchers(HttpMethod method, String patterns)

mvc 与 ant 匹配器的区别

  1. antMatchers("/secured")仅仅匹配 /secured
  2. mvcMatchers("/secured")匹配 /secured 之余还匹配 /secured/,/secured.html,/secured.xyz

因此 mvcMatcher 更加通用且容错性更高

RegexRequestMatcher

使用方法:

  1. regexMatchers(HttpMethod method, String regex)
  2. regexMatchers(String regex)

使用这一匹配器的主要优势在于它能够基于复杂的正则表达式对请求地址进行匹配,这是 MVC 匹配器和 Ant 匹配器无法实现的

http.authorizeRequests()
//只有输入的请求是一个合法的邮箱地址才能允许访问
.regexMatchers("/email/{email:.*(.+@.+\\.com)}")

SpringSecurity5(1-快速入门)的更多相关文章

  1. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  2. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  3. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  4. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  5. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  7. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  8. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  9. 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  10. Vue.js 快速入门

    什么是Vue.js vue是法语中视图的意思,Vue.js是一个轻巧.高性能.可组件化的MVVM库,同时拥有非常容易上手的API.作者是尤雨溪,写下这篇文章时vue.js版本为1.0.7 准备 我推荐 ...

随机推荐

  1. 【转载】Apache Doris、DorisDB傻傻分不清。。。

    https://www.sohu.com/a/488816742_827544   相信这两天很多社区小伙伴都看到 StarRocks 所谓"开源"的动态了,开源用户群里有很多小伙 ...

  2. Qt音视频开发34-不同库版本不同位数的库和头文件的引用

    一.前言 做开发过程中难免遇到需要引入第三方库的时候,而且需要在不同库版本.不同系统.不同位数下都需要.第三方的库版本众多,一般在大版本中的小版本都是兼容的,但是大版本不兼容,比如ffmpeg目前就有 ...

  3. Qt编写安防视频监控系统41-秘钥认证

    一.前言 早些年开源过一个秘钥生成器,做的比较粗糙,离真正的商业应用还差点距离,这次在用户的强烈要求下,对秘钥认证这块做了重新的改版,对原有的类进行了重写,重写后一个类不到300行完成所有的事情,并提 ...

  4. IM跨平台技术学习(十):快速对比跨平台框架Electron、Flutter、Tauri、React Native等

    本文由21CTO万能的大雄分享,本文有修订和改动. 1.引言 在当今快速发展的技术环境中,对跨平台桌面应用程序的需求正在不断激增. 开发人员面临着选择正确框架之挑战,以便可以高效构建可在 Window ...

  5. 使用R语言可视化地图数据

    在科研工作中,经常会遇到需要在地图上展示数据的情况,今天分享一下如何使用R语言可视化地图数据 # 先安装和导入R包,这里使用了本地地图数据,所以只导入maps包即可 # install.package ...

  6. .NET 依赖注入中的 Captive Dependency

    大家好,上一篇我们分析了 .NET 依赖注入的默认行为,其实呢还没完全讲完.今天我先给大家出一道题: public interface IDbContext { } public class SqlS ...

  7. manim边做边学--动画更新

    今天介绍Manim中用于动画更新的3个类,分别是: UpdateFromFunc:根据自定义的函数来动态更新 Mobject 的属性 UpdateFromAlphaFunc:根据动画的进度来平滑地改变 ...

  8. 简单了解RPC实现原理-copy

    核心框架类 /* * Copyright 2011 Alibaba.com All right reserved. This software is the * confidential and pr ...

  9. 【异步编程实战】如何实现超时功能(以CompletableFuture为例)

    [异步编程实战]如何实现超时功能(以CompletableFuture为例) 由于网络波动或者连接节点下线等种种问题,对于大多数网络异步任务的执行通常会进行超时限制,在异步编程中是一个常见的问题.本文 ...

  10. 云电脑Win7系统安装报错详解:问题与解决方案

    本文分享自天翼云开发者社区<云电脑Win7系统安装报错详解:问题与解决方案>,作者:每日知识小分享 随着云计算技术的快速发展,越来越多的人开始使用云电脑.然而,在为云电脑安装Win7系统时 ...