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的更多相关文章

  1. (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)

    兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...

  2. (八) SpringBoot起飞之路-整合Shiro详细教程(MyBatis、Thymeleaf)

    兴趣的朋友可以去了解一下前几篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...

  3. (九) SpringBoot起飞之路-整合/集成Swagger 2 And 3

    兴趣的朋友可以去了解一下其他几篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Spri ...

  4. springboot+jpa+mysql+swagger整合

    Springboot+jpa+MySQL+swagger整合 创建一个springboot web项目 <dependencies> <dependency>      < ...

  5. java框架之SpringBoot(12)-消息及整合RabbitMQ

    前言 概述 大多数应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦的能力. 消息服务中两个重要概念:消息代理(message broker)和目的地(destination).当消息发送者发送 ...

  6. java框架之SpringBoot(13)-检索及整合Elasticsearch

    ElasticSearch介绍 简介 我们的应用经常需要使用检索功能,开源的 Elasticsearch 是目前全文搜索引擎的首选.它可以快速的存储.搜索和分析海量数据.SpringBoot 通过整合 ...

  7. Springboot 2.0.4 整合Mybatis出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

    在使用Springboot 2.0.4 整合Mybatis的时候出现异常Property 'sqlSessionFactory' or 'sqlSessionTemplate' are require ...

  8. SpringBoot Druid整合,SpringBoot 集成Druid

    SpringBoot Druid整合,SpringBoot 集成Druid ================================ ©Copyright 蕃薯耀 2018年4月8日 http ...

  9. SpringBoot+SpringMVC+MyBatis快速整合搭建

    作为开发人员,大家都知道,SpringBoot是基于Spring4.0设计的,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程.另外Spr ...

  10. SpringBoot:4.SpringBoot整合Mybatis实现数据库访问

    在公司项目开发中,使用Mybatis居多.在 SpringBoot:3.SpringBoot使用Spring-data-jpa实现数据库访问 中,这种jpa风格的把sql语句和java代码放到一起,总 ...

随机推荐

  1. Mysql_二进制方式安装详解

    mysql 安装 1.安装方式 1.二进制安装 2.源码包安装 3.rpm包安装 1.二进制安装 1)上传或者下载包 [root@db01 ~]# rz #或者 [root@web01 ~]# wge ...

  2. 分布式存储ceph---openstack对接ceph存储后端(4)

    ceph对接openstack环境 一.使用RBD方式提供存储,如下数据: 1.image:保存glance中的image 2.volume存储:保存cinder的volume:保存创建虚拟机时选择创 ...

  3. IEEE 网址

    https://ieeexplore.ieee.org/document/506397

  4. Linux 系统日志和系统信息常用命令介绍

    日志文件 日 志 文 件 说 明 /var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一 /var/log/secure 与安全相关的日志信息 / ...

  5. 10.21 nmap:网络探测工具和安全/端口扫描器

    nmap命令 是一款开放源代码的网络探测和安全审核工具,是Network Mapper的缩写.其设计目标是快速地扫描大型网络.nmap可以发现网络上有哪些主机,主机提供了什么服务(应用程序名称和版本号 ...

  6. celery 简单示例

    目录结构 第一步  celery_task 里面的celery文件 import time from celery import Celery # celery from celery.schedul ...

  7. GPU端到端目标检测YOLOV3全过程(下)

    GPU端到端目标检测YOLOV3全过程(下) Ubuntu18.04系统下最新版GPU环境配置 安装显卡驱动 安装Cuda 10.0 安装cuDNN 1.安装显卡驱动 (1)这里采用的是PPA源的安装 ...

  8. Activiti Exploer工作流控制台使用指南!使用Activiti Explorer定义部署执行工作流

    Activiti Explorer简介 Activiti Explorer: Activiti控制台,是一个web应用程序 从Activiti的官方网站下载Activiti的压缩zip文件时,Acti ...

  9. python应用_读取Excel数据【二】_二次封装之函数式封装

    目的:想要把对Excel文件读取做成一个通用的函数式封装,便于后续简单调用,隔离复杂性. 未二次封装前原代码: #coding=gbkimport osimport xlrdcurrent_path= ...

  10. 看懂redis配置文件

    看懂redis 配置文件: https://blog.csdn.net/liqingtx/article/details/60330555 redis 数据库缓存双写一致性解决方案: https:// ...