注:本文章基于尚硅谷Springboot高级特性相关视频及资料进行编写,代码简单,较容易理解,若有问题或者源码资料获取可以在评论区留言或者联系作者!

本章代码较多,所以只截取部分代码(尤其是前端页面),可以联系作者获取完整代码;

文章目录

  • 导引
  • 一、、登录&认证&授权
  • 二、自定义用户退出
  • 三、Security管理前端页面
  • 四、记住我功能实现
  • 总结:

导引

应用程序两个主要区域:
“认证”:是建立一个他声明的主体的过程(一个”主体“一般指用户,设备或者可以在你的应用程序中执行动作的其它系统)
”授权“:指明确一个主体是否允许在你的应用程序执行一个动作的过程,
这两个主要区域是Spring Security的两个目标


一、、登录&认证&授权

(1)引入SpringSecurity(导入相关依赖);

<!--        引入SpringSecurity--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

(2)编写Security的配置类
编写配置类MySecurityConfig类继承WebSecurityConfigurerAdapter类,重写它的configure方法,定制自己的请求授权规则;配置不同的用户组权限访问可以访问不同的路径文件

ebSecurityConfigurerAdapter 类的主要方法及说明:

方法 描述
configure(HttpSecurity http) 定制基于HTTP请求的用户访问控制
confiure(AuthenticationManagerBuilder auth) 定制用户认证管理器来实现用户认证
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {//定制自己的请求授权规则@Overrideprotected void configure(HttpSecurity http) throws Exception {//super.configure(http); 这里注解掉父类的授权规则http.authorizeRequests().antMatchers("/").permitAll().antMatchers("/level1/**").hasRole("VIP1").antMatchers("/level2/**").hasRole("VIP2").antMatchers("/level3/**").hasRole("VIP3");//开启自动配置的登录功能http.formLogin().usernameParameter("user").passwordParameter("pwd").loginPage("/userlogin");//规则:/*1、/login来到登录页2、重定向到/login?error表示登录失败3、默认post形式的/login代表处理登录5、一旦定制loginPage;那么loginpage的post请求代表登录* */

(3)运行项目,会发现指定了用户权限的路径会无法访问

(4)添加用户权限
这里添加了三个用户,分别是“zhangsan”,“lisi”,”wangwu“,,每个用户都有对应的两个权限,也就是说,每个用户都只能访问两个权限所对应的路径,运行项目,结果和预想一致;

//定制认证规则@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception {//        super.configure(auth);auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser("zhangsan").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP2").and().withUser("lisi").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP2","VIP3").and().withUser("wangwu").password(new BCryptPasswordEncoder().encode("123456")).roles("VIP1","VIP3");}


对于没有访问权限的路径,该用户将不可以访问;


二、自定义用户退出

自定义用户退出主要考虑退出后的会话 如何管理以及跳转到哪个页面,HttpSecurity类的logout()方法用来处理用户退出,它默认处理路径为“/logout"的Post请求,同时也会清除Session和”Remenber Me“等任何默认用户配置。
(1)在配置类中编写配置的注销功能,用户注销成功后,会返回http:localhost:8080主页面

 //开启自动 配置的注销功能http.logout().logoutSuccessUrl("/");//指定注销成功后返回首页//规则/** 1、访问/logout表示用户注销,清空session* 2、注销成功会返回/logout?logout 页面* */

(2)退出成功


三、Security管理前端页面

这里我们将对前端页面进行管理,使用Security与Thymeleaf整合实现前端页面的管理,实现不同用户权限只能查看固定权限内容的功能;

(1)引入thymeleaf和springsecurity的整合依赖文件

 <!--    引入thymeleaf和springsecurity的整合依赖--><dependency><groupId>org.thymeleaf.extras</groupId><artifactId>thymeleaf-extras-springsecurity5</artifactId><version>3.0.4.RELEASE</version></dependency>

(2)引入security的名称空间;
xmlns:sec="http://www.thymeleaf.org/extras/spring-security"
在主页面welcome.html页面引入该命名空间;

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"xmlns:sec="http://www.thymeleaf.org/extras/spring-security">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head><body>
h1 align="center">欢迎光临武林秘籍管理系统</h1>
<!--如果没有登录-->
<div sec:authorize="!isAuthenticated()"><h2 align="center">游客您好,如果想查看武林秘籍 <a th:href="@{/userlogin}">请登录</a></h2>
</div>
<!--如果登录了-->
<div sec:authorize="isAuthenticated()"><h2><span sec:authentication="name"></span>您好,您的角色有:<span sec:authentication="principal.authorities"></span></h2>
</div><form th:action="@{/logout}" method="post"><input type="submit" value="注销"></input></form>
<!-- 如果有VIP1角色--><div sec:authorize="hasRole('VIP1')"><h3>普通武功秘籍</h3><ul><li><a th:href="@{/level1/1}">罗汉拳</a></li><li><a th:href="@{/level1/2}">武当长拳</a></li><li><a th:href="@{/level1/3}">全真剑法</a></li></ul></div><!--  如果有VIP2角色--><div sec:authorize="hasRole('VIP2')"><h3>高级武功秘籍</h3><ul><li><a th:href="@{/level2/1}">太极拳</a></li><li><a th:href="@{/level2/2}">七伤拳</a></li><li><a th:href="@{/level2/3}">梯云纵</a></li></ul></div><!--    如果有VIP3角色--><div sec:authorize="hasRole('VIP3')"><h3>绝世武功秘籍</h3><ul><li><a th:href="@{/level3/1}">葵花宝典</a></li><li><a th:href="@{/level3/2}">龟派气功</a></li><li><a th:href="@{/level3/3}">独孤九剑</a></li></ul></div></body>

通过xmlns:sec引入lSecurity安全标签
sec:authorize="!isAuthenticated()用于判断,如果不是登录的权限用户,将展示的相关信息
sec:authorize="!isAuthenticated()用于判断如果是登录的用户,将展示的相关信息
sec:authorize="hasRole('用户权限')"用于判断用户权限,如果是对应的可访问权限,才可以访问以下信息

(3)运行结果如下所示:


不同权限的用户登录,将会显示不同的页面信息;


四、记住我功能实现

在实际开发中,有些项目会为了用户登录方便还会提供记住我(Remenber Me)功能,如果用户在登录时勾选了记住我选项,那么在一段时间内,将会默认自动登录,并允许访问相关页面,这就免去了重复登录操作的麻烦。
具体流程:登录后将信息以cookie形式保存登录成功后,将cookie发给游览器保存,以后页面访问带上这个cookie。只要通过检查就可以免登陆,点击注销就会删除cookie
(1)在相关登录页面加入记住我选项框:
login.html页面如下所示:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><h1 align="center">欢迎登陆武林秘籍管理系统</h1><hr><div align="center"><form action="/userlogin" method="post">用户名:<input name="user"/><br>密码:<input name="pwd"><br/><input type="checkbox" name="remeber">记住我<br><input type="submit" value="登陆"></form></div>
</body>
</html>

(2)打开MySecurityConfig类,定制记住我功能:

//开启自动配置的记住我功能http.rememberMe().rememberMeParameter("remeber");

注意这里的参数,一定要和前端html页面记住我选项的name值相同;
(3)运行项目,登录时选择记住我选项,关闭页面,然后再次打开页面访问相关权限对应的页面发现能够正常访问,页面也能显示用户信息;说明能够正常运行;


总结:

本次主要讲解了SpringBoot的MVC Security安全管理,并体验了一些SpringBoot默认的安全管理的一些功能,另外还有一个Security的CSRF功能也较为常用,由于篇幅原因,感兴趣的可以联系作者进行相关资源的获取


如果感觉内容写的还不错的话,一键三连不迷路!!!!
后面将会更新更多学习内容,一起学习吧!!!!!!

【SpringBoot】最通俗易懂的安全管理机制(Spring Security)相关推荐

  1. springboot 2.x升级后出现Spring Security – There is no PasswordEncoder mapped for the id “null”的解决方案

    异常描述: java.lang.IllegalArgumentException: There is no PasswordEncoder mapped for the id "null&q ...

  2. springboot 访问html_Spring Boot中使用Spring Security进行安全控制

    我们在编写Web应用时,经常需要对页面做一些安全控制,比如:对于没有访问权限的用户需要转到登录表单页面.要实现访问控制的方法多种多样,可以通过Aop.拦截器实现,也可以通过框架实现(如:Apache ...

  3. spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security

    spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...

  4. SpringBoot 整合Spring Security(简单版)

    1 写在前面 关于spring security的介绍,网上一大堆,这里就不介绍了,这里直接使用springboot开始整合 2 整个流程 spring security授权和认证的流程大致和shir ...

  5. Spring Security:初体验

    在上一篇文章中,我们对于Spring Security有了一个基本的了解,那么重点是在Spring Boot中如何使用Spring Security呢? 文章目录 Spring Security初体验 ...

  6. Spring Security,没有看起来那么复杂(附源码)

    权限管理是每个项目必备的功能,只是各自要求的复杂程度不同,简单的项目可能一个 Filter 或 Interceptor 就解决了,复杂一点的就可能会引入安全框架,如 Shiro, Spring Sec ...

  7. Spring Security 之密码存储

    相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现GitHub快捷登录 Spring Secur ...

  8. Spring Security 自定义资源服务器实践

    相关文章: OAuth2的定义和运行流程 Spring Security OAuth实现Gitee快捷登录 Spring Security OAuth实现GitHub快捷登录 Spring Secur ...

  9. Spring Security Oauth2 token 续期

    本文参考以下文章.该文章作者有很多优秀文章,需要的小伙伴可以去看看. Spring Security系列(27)- Spring Security Oauth2之令牌过期和续签问题解决方案(1)_云烟 ...

最新文章

  1. relay.build调用关系
  2. 2021年大数据Flink(十七):Flink四大基石
  3. Metasploit Shell升级Meterpreter会话技巧
  4. Windows7下手动搭建Apache+PHP+MySQL方法记录
  5. gilab无法解析php文件,gitlab重新设置域名后就无法访问了。
  6. 获取焦点改变输入框背景色
  7. java流数据base64,Base64数据的流解码
  8. 【数学】稀疏图的随机游走问题
  9. sql-删除无效sql链接
  10. java excel 数组公式_教你如何快速学习Excel数组公式及运用
  11. 爬虫——爬取京东评价
  12. C++ 求圆的周长和面积
  13. 统计物理α和β方法体系介绍
  14. 期末了,用Python写个自动批改作业系统
  15. Spring实战(第四版)
  16. 删除 Windows 文件资源管理器左侧 OneDrive 图标
  17. ZFS-128bit文件系统
  18. python11.23
  19. python机械编程入门先学什么_编程入门先学什么
  20. c语言实现运输问题表上作业法,运输问题的表上作业法

热门文章

  1. 使用Python实现超级趋势指标(Super Trend Indicator)
  2. BAV20W规格信息
  3. 商务咖啡机实力推荐——Barsetto百胜图BAV01咖啡机
  4. 03 - OAI接入网搭建过程 - 研0
  5. XenDesktop 连接数据库报错
  6. lms算法的matlab实现,LMS算法的MATLAB实现
  7. 2022跨年烟花代码|用Python送你一场跨年烟花秀
  8. 4路电梯调度——pair program总结
  9. aspx repeater 用法_ASP.NET-----Repeater数据控件的用法总结(转)
  10. jop怎么读音英语怎么说_job怎么读?