开发者学堂课程【SpringBoot 快速掌握 - 高级应用:权限控制 &注销】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/613/detail/9314
权限控制 &注销
注销跟登陆一样,要用 http.logout(); 开启自动配置的注销功能:
可以去一下文档看一下这自动配置的注销功能做了哪些事
先点一个 setting ,实时的在 general 里边显示这个文档。
自动配置规则:
它会访问一个 logout 请求,这个表示一个用户退出来帮清空 session
1、访问 / Logout 表示用户注销,清空session
这相当于退出,可以在首页来写一个退出的表单,
比如在一个首页“请登录”表单下边写一个前面的</form>表单,这表单“ th:action” 来指定“@{}”当前项目下的“{/logout}”>由于要退出,所以说这个“method”默认还是这个“post”,这是我们这个 security 的规定,虽然是文档,但还没写
加上<input type=“submit” 写一个value=“注销”/>
</form> th:action=“@{/logout}”method=“post”>
<input type=“submit”value=“注销”/>注销成功了会返回“登录”页面,后边加一个“logout”
来测试一下注销能不能使用?
启动一下,访问刷新,这里有注销按钮,可以先登陆进来,随便点一个,“zhangsan”
“123456”,登陆进来,都是可以的,它没有权限不能访问,
注销,注销完了只要退出成功它会返回“登陆页面”,后面会加一个 logout ,又是一个默认规则。
2、注销成功会返回 / login?logout 页面
Log 是之前默认生成的登录页,退出完成后还在登录页
退出完成后还在首页:
这有一个 logout 来定制它的规则
http.logout(“/”).logoutSuccessurl,退出成功后要去的地址,写一个 (“/”);注销成功以后来到首页 ,
注销功能:
进行一个测试,重新启动,刷新先来登录,登录进来后能访问的页面可以,不能的没有权限
注销以后,默认的是之前注销会回到登陆页面,现在来点注销已经回到了首页,再来访问,现在没有权限提示登录
两个功能:
第一个功能:
当用户没有登陆的时候来显示这句话“游客您好,如果想要查看武林秘籍 请登录 ,当用户登录以后再来显示“登录”按钮,包括用户信息.
第二个功能:
如果用户是张三登录,张三有 VIP1,VIP2 两个权限,只来显示“普通武功秘籍”和“高级武功密集”这两个页面.
如果是李四登录,他没有 VIP2 权限,就不显示“普通武功秘籍”部分内容
结合simlife 模板引擎提供的对 secrunity 的支持,包括文档里有的,这块就有安全相关的属性,比如“security:authorize”来进行授权:通过判断“isAuthenticated()”——是否认证通过,是否登录,成功后可以运用一些安全属性,
比如“sec:authentication来认证一些登陆信息,用户的名字“name”,用户的角色“Roles”,可以用 principal ,authorities 来得到这些,使用安全属性必须引入 Spring Security 和 Thymeleaf 的整合模块
在 pom 文件里引入一下,
首先来到 parents 的 dependencies 里,
有个安全的 springsecurity 的 washnumber ,它现在是213,变成适合搜索 thymeleaf 有 extras-springsecurity 来引入它,使用302这个版本来改一下它,pom 文件里,属性版本里生成302,要引入 dependency 整个复制,ctrl+c,ctrl+v 不用写版本了,删了,Thymeleaf 和 Springsecurity 就引进来了
在页面也要这么写,页面要引入 security 的名称空xmlns;sec\“http://www.thymeleaf.org/thymeleaf-extras-springsecurity
这句话在没登陆的时候写的,写一个<div sec:>,有一个 authorize 来授权,判断isAuthenticated()”认证,
没认证写一个</div>,没认证的情况下显示,
认证了再写一个<div sec:authoorize= “ isAuthenticated()”>是否认证了,认证了就显示注销按钮 </form> th:action=“@{/logout}”method=“post”>同时显示是拿个用户<h2>xxx,您好,<您的角色有,xxx</h2> 这个人名“xxx”需要取出来,用span,span 里边就把人名写上,名字可以使用 sec:authentication 来取出名字
<h2>span sec:authentication= “name”></span>
您好,您的角色有:
<spansec:authentication= principal.authorities”</span/><h2>
有一个叫 principal 可以获取到 authorities,可以读取到所有角色
启动测试下,刷新,现在看到游客您好,登录状态显示,不同角色显示不同武功秘籍
<span sec:authentication= “”></span></h2>
也可以取出来,<span
认证了显示注销按钮,<div sec:authorize=isAuthenticated()”>
您好,您的角色有,<h2>xxx</h2> ,您好,这个角色有,<span sec></span
登录,返回主页,现在角色变成张三,显示VIP1 VIP2,普通武功秘籍我们用 div sec,我们来授权 authorites 用 hasRole 来判断你是否拥有一个角色“VIP1”,有VIP1角色可以显示武功秘籍1,
<div sec : authorizes”hasRole(‘VIP1’)”>
如果是VIP2
<div sec : authorizes”hasRole(‘VIP2’)”>
如果有VIP3,放上的就是“高级武功秘籍”
<div sec : authorizes”hasRole(‘VIP3’)”>
页面元素也可以根据角色的不同来判断显示
启动测试,默认没登陆,刷新登录一下,来到login页面,输入“zhangsan”,密码123456,登陆起来,张三登录起来只会显示张三能操作的,同样,李四登陆进来能操作的资源也是按他的角色在这显示的
重新点击注销,想登录点击“请登录”,面向的就是默认生成的登录页。