我想每个写项目的人,都肯定会遇到控制权限这个问题.
例如这个这个链接只能管理员访问,那个链接丫只能超级管理员访问等等,实现方式也有多种多样,控制的粒度也不一样
。
以前刚学的时候,不会框架,大都是手写注解+过滤器
来进行权限的控制,但这样增加了过滤器的负担。用起来也会稍微有些麻烦,粒度不太好控制。用框架的话,就是封装了更多的操作,让一切更简单吧。当然不局限于Security,还有像Shiro安全框架,这两种非常常见。
一起加油吧!!!
😁
下面就开始吧!!!👇
一、前言
介绍:
Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
官网:
优缺点:
优点
- Spring Boot 官方提供了大量的非常方便的开箱即用的 Starter ,包括 Spring Security 的 Starter ,使得在 Spring Boot 中使用 Spring Security 变得更加容易。
- Spring Security功能强大,比较好用。
缺点
- Spring Security 是一个重量级的安全管理框架,
- Spring Security概念复杂,配置繁琐(这个确实,没法逃开)
案例:
我们在访问一个网站时,大都都会设置普通用户能有的权限,然后管理员有的权限,再就是超级管理员等等,这次就是实现这样一个案例。
项目结构:
二、环境准备
2.1、数据库表
1 | sql复制代码CREATE TABLE `account` ( |
2.2、导入依赖
1 | xml复制代码<parent> |
2.3、配置文件
1 | properties复制代码# 应用名称 |
2.4、WebSecurityConfig
Security的主要配置类:
1 | java复制代码import com.crush.security.auth.filter.JwtAuthenticationFilter; |
2.5、Security身份验证
1 | java复制代码import com.crush.security.entity.MyUser; |
2.6、Security授权
1 | java复制代码import com.crush.security.utils.JwtTokenUtils; |
2.7、UserDetailsService
UserDetailServiceImpl 实现了UserDetailsService
,用来加载用户特定数据的核心接口。
1 | java复制代码import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
2.7、MacLoginUrlAuthenticationEntryPoint
1 | java复制代码/** |
2.8、MyAccessDeniedHandler
1 | java复制代码/** |
2.9、MyLogoutSuccessHandler
1 | java复制代码/** |
2.10、JWT的工具类
生成token
1 | java复制代码package com.crush.security.utils; |
弄完上面这些,相关配置就都搞定了,剩下就是最简单的编码啦。
三、代码
entity
1 | java复制代码@Data |
mapper
1 | java复制代码import com.baomidou.mybatisplus.core.mapper.BaseMapper; |
service、impl
1 | java复制代码import com.baomidou.mybatisplus.extension.service.IService; |
1 | java复制代码import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
controller
1 | java复制代码package com.crush.security.controller; |
四、测试
注
:我使用的测试工具是Postman
,另外login接口接收的数据是需要JSON类型的。
1)登录
注意这里的token,我们是需要把他记住,下次去请求要携带上。
2)测试管理员
3)测试hasAnyAuthority ()注解
hasAnyAuthority() 也是可以多个字符串 权限验证,可以不跟ROLE_前缀
五、总结
Security框架和SpringBoot集成,其实上手特别快,但是如果要想研究的比较深刻的话,我觉得是比较困难的,上文讲过,security是属于一个重量级的框架,里面很多东西特别多。使用方面肯定是没有任何问题的。
你卷我卷,大家卷,什么时候这条路才是个头啊。😇(还是直接上天吧)
有时候也想停下来歇一歇,一直做一个事情,感觉挺难坚持的。😁
你好,如果你正巧看到这篇文章,并且觉得对你有益的话,就给个赞吧,让我感受一下分享的喜悦吧,蟹蟹。🤗
如若有写的有误的地方,也请大家不啬赐教!!
同样如若有存在疑惑的地方,请留言或私信,定会在第一时间回复你。
持续更新中
本文转载自: 掘金