SpringBoot--- SpringSecurity进行注销权限控制的配置方法

环境

IDEA :2020.1

Maven:3.5.6

SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不同,版本适配问题,为配合使用降级)

1、注销

这里也有一个前提问题需要注意,我们登录操作都是在开启防跨域攻击的环境下进行的。

毫无疑问,注销也是在这样的情况下进行的。

登录时我们提交表单,采用 POST 方法传输,通过使用 Thymeleaf 在 form 表单添加 th:action 元素,Thymeleaf 会自动为我们添加 _csrf 元素。

同样注销操作也是要带有 _csrf 参数认证的。

<form th:action="@{/logout}" method="post">
			<button type="submit" >注销</button>
</form>

我们把它做成一个表单按钮,同时采用 POST 方法传输,使用 SpringSecurity 提供的默认 /logout 方法进行登出注销。

开发者是不需要在 Controller 配置这个 /logout 方法处理的,和 /login 一样,这是由 SpringSecurity 提供的。

我们需要在之前登陆的配置类配置登出的各种属性即可。

.and()  //这里采用链式编程
  .logout()
  	.logoutSuccessUrl("/index") //注销成功后,调转的页面
 /* 	.logoutUrl()  配置自己的注销URL,默认为 /logout
  	.invalidateHttpSession() 是否销毁session,默认ture
  	.deleteCookies()   删除指定的cookies  

销毁session 相信很容易理解,一次对话,可以注销关闭,或者关闭页面会自动销毁。

记住我

cookies 需要重点介绍一下,这也是我们常用的记住我,在关闭页面或浏览器之后,下次打开页面时,是以之前登录的用户登录的。

为此,我们需要在登录表单增加记住我选项

tr>
<td>
<input type="checkbox" name="remember-me">
</td>
<td>Remember me on this computer.
</td>
</tr>

同时在配置类开启记住我。

.and()
  .rememberMe(); 

这里 checkbox 的 name 我们使用默认的 remember-me ,同样这一 cookies 的 name 也会被浏览器记住,这样我们只需要开启记住我即可使用。

如果不使用 name= "remember-me" ,而是使用其他 name 属性值,则需要配置指定,以便 SpringSecurity 接收是否记住我。

.and()
  .rememberMe().rememberMeParameter("rememberme");
//接收前端自定义记住我的name<input name="rememberme">,默认是remember-me

回到 deleteCookies() 方法的配置上,要销毁指定的 cookies ,我们要指定cookies 的名字即可。

.and()
  .logout().logoutSuccessUrl("/index").deleteCookies("remember-me")
 //销毁 name="remember-me"的 cookies

浏览器登录,选用记住我

登录后, F12,查看 cookies

第一个为 cookies,第二个则是此次会话的 session 对象。

可以看到 cookies 是有限期的,默认为 14 天。

点击注销。

由于配置了删除 cookies,cookies 已经被删除。

重新登录,这次没有选记住我,同时 session 也已经不是同一个,值已经改变了。

2、权限控制

同时,页面还有一个重要的需求没有实现。

没有某一权限的用户,不应该看到点击的入口(武功秘籍)。所谓得不到的最想要,你这不是摆着馋他嘛!可不能把他害咯。

对此,我们可以结合 Thymeleaf 和 SpringSecurity 实现哪些用户可以看到哪些内容。

首先,我们要导入 thymeleaf-springsecurity 整合的依赖

<!--  thymeleaf-springsecurity整合-->
<!--  https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity4 -->
  <dependency>
   <groupId>org.thymeleaf.extras</groupId>
   <artifactId>thymeleaf-extras-springsecurity4</artifactId>
   <version>3.0.4.RELEASE</version>
  </dependency>

同时还要在页面标签导入命名空间

<html xmlns:th="http://www.thymeleaf.org"
	 xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity4">

在页面下把需要权限限制的内容包起来

<div sec:authorize="!isAuthenticated()">
	<h2 align="center" >游客您好,如果想查看武林秘籍
		<a th:href="@{/toLogin}">请登录</a>
	</h2>
	</div>

sec:authorize="!isAuthenticated()" 表示未登录认证的用户才可以查看到的内容。

<div sec:authorize="isAuthenticated()">
		<a>
			Count: <span sec:authentication="name"></span>
		</a>
		<form th:action="@{/logout}" method="post"><!--只能通过表单加 -csrf 认证,其他(超链接)无法添加-->
			<button type="submit" >注销</button>
		</form>
	</div>

sec:authorize="isAuthenticated()" 表示已经登录认证的用户才可以查看到的内容。

sec:authentication="name" 表示获取认证的用户的用户名。

唉,别忘了,重点,有些武功秘籍不能让没有权限的用户看到,比如 level2 的,像什么太极拳,七伤拳,梯云纵。哈哈哈

<div sec:authorize="hasRole('level2')">
<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>

sec:authorize="hasRole('level2')" 规定只有 level 2 权限的用户才能查看。

其他的可以此类推做出配置。

除此之外,还可以有其他定制化配置,权限(role),权力(authority),IP ,是否允许(permission)。

spring security 5.1.6版本,从源码的角度可以看出使用不同的hasAuthority、hasRole方法判断权限时的区别,其实他们最终调用的都是hasAnyAuthorityName()方法,唯一不同的就是hasRole()在调用时,传递了前缀defaultRolePrefix,这就导致了他们两者之间比较的字符产生了差异。spring security应该想代表的意思就是权限字符加了ROLE_就是角色Role,如果没有加就是一个权限Authority。

SpringSecurity 都有为我们提供。

到此这篇关于SpringBoot--- SpringSecurity进行注销,权限控制的文章就介绍到这了,更多相关SpringSecurity注销 权限控制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制

    思路 : 动态路由实现:在导航守卫中判断用户是否有用户信息, 通过调用接口,拿到后台根据用户角色生成的菜单树, 格式化菜单树结构信息并递归生成层级路由表并 使用Vuex保存,通过  router.addRoutes  动态挂载到  router  上,按钮级别的权限控制,则需使用自定义指令去实现. 实现: 导航守卫代码: router.beforeEach((to, from, next) => { NProgress.start() // start progress bar to.meta

  • SpringBoot+Spring Security+JWT实现RESTful Api权限控制的方法

    摘要:用spring-boot开发RESTful API非常的方便,在生产环境中,对发布的API增加授权保护是非常必要的.现在我们来看如何利用JWT技术为API增加授权保护,保证只有获得授权的用户才能够访问API. 一:开发一个简单的API 在IDEA开发工具中新建一个maven工程,添加对应的依赖如下: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-b

  • java中自定义Spring Security权限控制管理示例(实战篇)

    背景描述 项目中需要做细粒的权限控制,细微至url + httpmethod (满足restful,例如: https://.../xxx/users/1, 某些角色只能查看(HTTP GET), 而无权进行增改删(POST, PUT, DELETE)). 表设计 为避嫌,只列出要用到的关键字段,其余敬请自行脑补. 1.admin_user 管理员用户表, 关键字段( id, role_id ). 2.t_role 角色表, 关键字段( id, privilege_id ). 3.t_privi

  • 基于spring security实现登录注销功能过程解析

    这篇文章主要介绍了基于spring security实现登录注销功能过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependenc

  • SpringBoot + SpringSecurity 短信验证码登录功能实现

    实现原理 在之前的文章中,我们介绍了普通的帐号密码登录的方式: SpringBoot + Spring Security 基本使用及个性化登录配置. 但是现在还有一种常见的方式,就是直接通过手机短信验证码登录,这里就需要自己来做一些额外的工作了. 对SpringSecurity认证流程详解有一定了解的都知道,在帐号密码认证的过程中,涉及到了以下几个类:UsernamePasswordAuthenticationFilter(用于请求参数获取),UsernamePasswordAuthentica

  • SpringBoot--- SpringSecurity进行注销权限控制的配置方法

    环境 IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.0.9 (与此前整合的版本2.3.3 不同,版本适配问题,为配合使用降级) 1.注销 这里也有一个前提问题需要注意,我们登录操作都是在开启防跨域攻击的环境下进行的. 毫无疑问,注销也是在这样的情况下进行的. 登录时我们提交表单,采用 POST 方法传输,通过使用 Thymeleaf 在 form 表单添加 th:action 元素,Thymeleaf 会自动为我们添加 _csrf 元素. 同样注销操作也是要带有

  • Java SpringBoot 使用拦截器作为权限控制的实现方法

    如何实现 首先拦截器是属于web这块的,那我们需要引入springboot web模块,具体版本在parent中 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> 然后我们在config目录下新建interceptor目录,用来放拦截器 我们新建两

  • SpringBoot整合SpringSecurity实现权限控制之实现多标签页

    目录 一.需求描述 二.前端实现 三.效果演示 四.源码 一.需求描述 多标签页 (Tabs) 的设计对于多窗口多任务管理有着无与伦比的高效率与方便性 在上面的文章中已经实现了后台管理的基本权限功能,包括用户.角色.菜单管理及权限分配. 用户通过单击侧边栏的菜单,就可以调出对应的功能页面进行使用.但在使用的过程中,我们发现程序只能在同一时间打开一个页面.我们更希望打开多个功能页面时,这些页面以标签的形式集成在同一个窗口显示,要想切换到某个页面或是关闭某个页面,我们只需要操作相应的标签即可,非常方

  • SpringBoot 整合Security权限控制的初步配置

    正文 在源码目录下新建 config 目录, 在该目录下新建 WebSecurityConfig 类文件 /** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding co

  • SpringBoot整合Security权限控制登录首页

    目录 在 pom 文件中增加thymeleaf页面支持 application.yml 配置文件 login 页面 controller目录下跳转配置 UserController 在 pom 文件中增加thymeleaf页面支持 <!-- 引入页面模板 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thym

  • Springboot在IDEA热部署的配置方法

    1 pom.xml文件 注:热部署功能spring-boot-1.3开始有的 <!--添加依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <!-- optional=true,依赖不会传递,该项目依赖devtools:之后依赖myboot项目的项目如果想要使用d

  • django 实现编写控制登录和访问权限控制的中间件方法

    django中,很多时候我们都需要有一个地方来进行更加详细的权限控制,例如说哪些用户可以访问哪些页面,检查登录状态等,这里的话就涉及到了中间件的编写了. 在django项目下的setting.py文件中,有一个MIDDLEWARE_CLASSES的字段,这里存放的就是中间件,用户的访问会先经过这些中间件的处理之后再给各种views函数进行处理.在这个参数中加入我们接下来要编写的中间件: MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middlew

  • Vue路由守卫及页面登录权限控制的设置方法(两种)

    ①先在我们的登录页面存储一个登录数据 // 登录成功时保存一个登录状态: sessionStorage.setItem("flag", 1); ② 添加路由守卫 方法一: 直接在路由中添加 const router = new VueRouter({ ... }) // 路由守卫 router.beforeEach((to, from, next) => { // ... }) 方法二:当我们使用的是export default 方法时可以在main.js中添加 router.b

  • SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法

    简介: Springboot使用Mybatis&Mybatis-plus 两者文件映射配置略有不同,之前我用的是Mybatis,但公司用Mybatis-plus:自己新建了一个Springboot项目,代码运行时一直报错not found not found,明明配置了mybatis相关信息的扫描路径,但是就是not found:检查修改了很多地方但都是无用功,最终发现是Plus惹的祸. 1.使用Mybatis <dependency> <groupId>org.mybat

  • springboot 同时启用http/https的配置方法

    1. 启用HTTPS 修改配置 application.yml server: # port: 80 port: 443 ssl: enabled: true key-store: /key_store.jks key-store-password: key_store_pwd 2. 添加http协议连接器 增加JAVA配置 @Bean public ServletWebServerFactory servletWebServerFactory() { TomcatServletWebServe

随机推荐