9、SpringBoot整合之SpringBoot整合SpringSecurity
SpringBoot整合SpringSecurity
一、创建项目,选择依赖
选择Spring Web、Thymeleaf即可




二、在pom文件中导入相关依赖
<!-- 导入SpringSecurity的启动器 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
三、在resources\templates下准备页面
目录结构如下

index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>index</title>
</head>
<body>
<div align="center">
<h1>Welcome to index</h1>
<div>
<!-- 这里的url是controller层的url -->
<a th:href="@{/level_1/gotoHtml}">请求level_1</a>
</div>
<div>
<a th:href="@{/level_2/gotoHtml}">请求level_2</a>
</div>
<div>
<a th:href="@{/level_3/gotoHtml}">请求level_3</a>
</div>
<!-- 为稍后SpringSecurity的退出登录功能做准备 -->
<a th:href="@{/logout}">登出</a>
</div>
</body>
</html>
level_1.html、level_2.html、level_3.html内容相同,在此不多赘述,将数字部分替换即可
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>level_1</title>
</head>
<body>
<div align="center">
<h1>Welcome to level_1</h1>
<a th:href="@{/}">回到index</a>
</div>
</body>
</html>

四、构建controller层
package cn.byuan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class LevelAction {
@RequestMapping({"/", "/index", "index.html"})
public String goToIndex(){
return "index";
}
// 这里的url就是上面index.html中a标签中出现的url
@RequestMapping("/level_1/gotoHtml")
public String goToLevel1(){
return "level_1";
}
@RequestMapping("/level_2/gotoHtml")
public String goToLevel2(){
return "level_2";
}
@RequestMapping("/level_3/gotoHtml")
public String goToLevel3(){
return "level_3";
}
}
五、创建配置类,进行SpringSecurity的相关配置
SpringSecrity的两大核心:认证(Authentication)、授权(Authorization)
SpringSecurity的主要类
| 主要类 | 含义 |
|---|---|
| @EnableWebSecurity | 开启WebSecurity |
| WebSecurityConfigurerAdapter | 自定义security策略 |
| AuthenticationManagerBuilder | 自定义认证策略 |
创建配置类
package cn.byuan.config;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@EnableWebSecurity// 开启WebSecurity模块
public class SecurityConfig extends WebSecurityConfigurerAdapter {
}
**光标移入花括号内,按下 ctrl + o **

package cn.byuan.config;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@EnableWebSecurity// 开启WebSecurity模块
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/*
* 配置授权规则
* */
@Override
protected void configure(HttpSecurity http) throws Exception {
// 添加请求授权规则
http.authorizeRequests()
.antMatchers("/").permitAll()// 首页所有人都可以访问
.antMatchers("/level_1/**").hasRole("vip1")// level_1下的所有请求, vip1用户才可以访问
.antMatchers("/level_2/**").hasRole("vip2")// level_2下的所有请求, vip2用户才可以访问
.antMatchers("/level_3/**").hasRole("vip3");// level_3下的所有请求, vip3用户才可以访问
http.formLogin();// 开启登录页面, 即无权限的话跳转到登录页面, 默认地址: /login, 这是为了有人直接访问权限范围内某一url
http.logout().logoutSuccessUrl("/");// 注销后跳转到首页
http.rememberMe();// 开启记住我功能, 默认保存两周, 底层使用cookie机制实现
}
/*
* 配置认证规则
*
* 在新版本的SpringSecurity中新增了许多加密方法, 不使用加密的话就会出现异常
* 这里我们在内存中对用户进行模拟, 真正的开发过程中会使用数据库
*
* */
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.passwordEncoder(new BCryptPasswordEncoder())
.withUser("root").password(new BCryptPasswordEncoder().encode("root")).roles("vip1", "vip2", "vip3")
.and()
.withUser("zlf").password(new BCryptPasswordEncoder().encode("zlf")).roles("vip1", "vip2")
.and()
.withUser("user").password(new BCryptPasswordEncoder().encode("user")).roles("vip1");
}
}
六、测试
打开浏览器,输入地址:http://localhost:8080/ 敲击回车

点击:请求level_1,会自动跳转至登录页面,输入账号、密码,点击Sign in

由于root拥有所有页面的访问权限,因此访问成功

点击回到index,点击退出登录,切换其他账号进行测试


这次我们使用user账号来访问level_2,user只有level_1的访问权限

可以看到,如果没有权限访问指定的url,那么会报错误:403

源码地址:https://github.com/byuan98/springboot-integration/tree/master/test009_springboot_springsecurity
9、SpringBoot整合之SpringBoot整合SpringSecurity的更多相关文章
- (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)
兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...
- (八) SpringBoot起飞之路-整合Shiro详细教程(MyBatis、Thymeleaf)
兴趣的朋友可以去了解一下前几篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...
- (九) SpringBoot起飞之路-整合/集成Swagger 2 And 3
兴趣的朋友可以去了解一下其他几篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Spri ...
- springboot+jpa+mysql+swagger整合
Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency> < ...
- java框架之SpringBoot(12)-消息及整合RabbitMQ
前言 概述 大多数应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦的能力. 消息服务中两个重要概念:消息代理(message broker)和目的地(destination).当消息发送者发送 ...
- java框架之SpringBoot(13)-检索及整合Elasticsearch
ElasticSearch介绍 简介 我们的应用经常需要使用检索功能,开源的 Elasticsearch 是目前全文搜索引擎的首选.它可以快速的存储.搜索和分析海量数据.SpringBoot 通过整合 ...
- Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...
- SpringBoot Druid整合,SpringBoot 集成Druid
SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...
- SpringBoot+SpringMVC+MyBatis快速整合搭建
作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...
- SpringBoot:4.SpringBoot整合Mybatis实现数据库访问
在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...
随机推荐
- sed -n "29496,29516p" service.log:从29496行开始检索,到29516行结束
在工作中常用的Linux命令 javalinux 发布于 2019-07-24 约 11 分钟 前言 只有光头才能变强. 文本已收录至我的GitHub仓库,欢迎Star:https://gith ...
- 更换介质:请把标有Debian ... 的盘片插入驱动器
Debian安装软件报错如下: 更换介质:请把标有 "Debian GNU/Linux 10.8.0 _Buster_ - Official amd64 DVD Binary-1 20210 ...
- ASP.NET Core MVC 入门到精通 - 3. 使用MediatR
ASP.NET Core MVC 入门到精通 - 3. 使用MediatR 环境: .NET 5 ASP.NET Core MVC (project) 1. MediatR MediatR .NET中 ...
- 微信小程序从开发到上线流程
一.微信小程序从开发到上线流程 注册小程序 1.登录微信公众平台 https://mp.weixin.qq.com 2.在微信公众平台>立即注册>小程序中注册微信小程序 3.在邮箱中激活并 ...
- Go语言介绍(背景、特点)
一.go语言的背景 Go是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go(又称 Golang)是 Google 的 Rob Pike(罗勃.派克),Ken Thompson(肯· ...
- 为x86 CPU自动调度神经网络
为x86 CPU自动调度神经网络 对特定设备和工作负载进行自动调试对于获得最佳性能至关重要.这是有关如何使用自动调度器为x86 CPU调试整个神经网络的文档. 为了自动调试神经网络,将网络划分为小的子 ...
- 特斯拉Tesla Model 3整体架构解析(上)
特斯拉Tesla Model 3整体架构解析(上) 一辆特斯拉 Model 3型车在硬件改造后解体 Sensors for ADAS applications 特斯拉 Model 3型设计的传感器组件 ...
- 如何为嵌入式应用选择适当的SSD
如何为嵌入式应用选择适当的SSD Selecting the right SSD for evolving embedded applications 变革涉及技术的每一个要素,闪存也不例外.价格下跌 ...
- 解决:ImportError: DLL load failed while importing _sqlite3: 找不到指定的模块。
Django框架学习第一步,创建一个Django工程. 本次采用的是创建虚拟环境来创建Django工程.本地解释器采用anaconda ,内置Python3.8 在pycharm中报错: 内容如下:I ...
- Django(58)viewsets视图集详解
前言 ViewSet 只是一种基于类的视图,它不提供任何方法处理程序(如 .get()或.post()),而是提供诸如.list()和 .create() 之类的操作. ViewSet 的方法处理程序 ...