0
点赞
收藏
分享

微信扫一扫

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面


系列文章目录

文章目录

  • 系列文章目录
  • 11-实验4-退出登录(注销)-禁用CSRF时的做法
  • 12-实验4-退出-启用CSRF时的做法
  • 13-实验5-基于角色或权限访问控制
  • ==这个要清楚==
  • 14-实验5-基于角色或权限访问控制 -ROLE 前缀
  • 15-实验5-基于角色或权限访问控制-ROLE的坑
  • 加前缀的原因
  • 16-实验6-自定义403页面
  • 17-实验7-记住我-内存版(下一篇)
  • 18-实验8-记住我-数据库版
  • 19-实验9-数据库登录-默认实现介绍
  • 20-实验9-数据库登录-创建UserDetailsService类
  • 21-实验9-数据库登录-装配UserDetailsService

11-实验4-退出登录(注销)-禁用CSRF时的做法

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_数据库_02


最简单的方式

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_03


注意是写在 include下的navbar.jsp页面

在 navbar.jsp 页面 ,先注释掉这些没有用的代码,因为退出登录这个按钮是在 navbar.jsp 页面

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_04


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_05

这就是最简单的

什么其它的因素都不考虑

然后测试一下

登录进来后,点退出看看能不能成功,正常来说,是可以完美退出的

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_06


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_07


最简单的一种方式就是这样的,下面我们再看一下启用CSRF时的做法,这个就要复杂一些

12-实验4-退出-启用CSRF时的做法

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_08


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_09


把之前注释的表单,取消注释

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_10


我们希望,点这个超链接,就会提交表单

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_11


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_12


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_13


这些操作用户是没有任何感知的,页面上看不出

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_14

13-实验5-基于角色或权限访问控制

这个要清楚

SpringSecurity里面 对应一个用户 你要么有角色 要么有权限 都可以 进行资源访问,一个都没有就不行

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_15


要求

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_数据库_16


现在我们之前设置的tom和jerry都是没有学徒的角色的,肯定是访问不了的

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_17


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_18


level1下的资源只有 拥有 学徒 角色 的用户才能访问

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_19


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_数据库_20


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_21


加上角色信息,,然后重新登录,就可以访问了

要求 /level2/** 下 的 资源 必须是要 具备 如下的一个权限的 用户才能访问

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_22


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_23


既可以通过角色来控制访问的资源,也可以通过权限来控制访问的资源

14-实验5-基于角色或权限访问控制 -ROLE 前缀

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_24


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_数据库_25


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_26


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_27


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_28


同理权限我们也点进去

发现拼了一个表达式

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_29


根据我们跟踪代码发现 SpringSecurity 底层,角色加了前缀,权限是拼了一下,没有加前缀我们再来看看设置角色和权限的时候底层是怎么做的

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_30


这里打断点的时候,必须要重新启动,因为是启动的时候读取设置的,不重启,没办法定位到断点跟踪到这的时候,大概有意思是,我们自己不要加ROLE_

SpringSecurity会给我们加

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_31

15-实验5-基于角色或权限访问控制-ROLE的坑

为什么说上面那个,是因为下面这个原因

目前基于内存的权限当然是没什么问题,

将来做基于数据库,要从数据库里面查询数据出来的权限管理可能就有问题了

将来需要我们自己去写这一部分

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_访问控制_32


我们自己写的时候也要像SpringSecurity框架那样,把前缀给加上

加前缀的原因

如果不加前缀 SpringSecurity 就无法区分角色和权限

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_33

16-实验6-自定义403页面

没有权限会跑到403 页面用户体验较差

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_34


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_35


页面已经有了,我们现在要做的事情是

没有权限后,怎么让它来到这个页面,而不是再报403

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_36

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_37


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_数据库_38


这个接口是在这里指定的,指定即可页面跳转

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_39

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_40


如何让这个 ${message} 生效

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_自定义_41


需要我们重写一个地方,让后自己往里面去放消息即可

需要注意的是,页面跳转也是在这个方法里面做了

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_数据库_42


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_43

好处是,你可以在页面出现错误之后,进一步进行处理,比如记录java日志等等

项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_44


项目一学习框架SpringSecurity07_03_SpringSecurity、退出登录、禁用CSRF、基于角色或权限访问控制、自定义403页面_csrf_45

17-实验7-记住我-内存版(下一篇)

18-实验8-记住我-数据库版

19-实验9-数据库登录-默认实现介绍

20-实验9-数据库登录-创建UserDetailsService类

21-实验9-数据库登录-装配UserDetailsService


举报

相关推荐

0 条评论