解析spring-security权限控制和校验的问题

论坛 期权论坛 脚本     
niminba   2021-5-23 02:34   3446   0

前言

    在我们项目中经常会涉及到权限管理,特别是一些企业级后台应用中,那权限管理是必不可少的。这个时候就涉及到技术选型的问题。在我以前项目中也没用到什么权限框架,就全部到一个spring mvc拦截器中去校验权限,当然,对需求比较少,小型的项目这也不失一个好的实现(实现简单,功能单一),但是对于一些比较大的应用,权限认证,session管理要求比较高的项目,如果再使用mvc拦截器,那就得不偿失了(需要自己去实现很多的代码)。
    现在比较流行的权限校验框架有spring-security 和 apache-shiro。鉴于我们一直在使用spring全家桶,那我的项目中当然首选spring-security。下面我我所认识的spring-security来一步一步的看怎么实现。这里我抛砖引玉,欢迎大家指正。

我的完整代码在我的github中 我的github ,欢迎大家留言讨论!!


一、spring-security是什么?

    Spring Security 是 Spring 家族中的一个安全管理框架,类似的安全框架还有apache-shiro。shiro以使用简单,功能强大而著称,本篇我们只讨论Spring Security,shiro就不再铺开讨论了。
    以前我们在使用springMVC与Security 结合的时候,那一堆堆配置文件,长篇大论的xml看的人头大,幸好,现在有了springboot,可以基于java config的方式配置,实现零配置,而且又兼有springboot的约定大于配置的前提,我们项目中的配置文件或需要配置的代码大大减少了。

二、spring-security能为我们做什么?

spring-security最主要的功能包含:
1、认证(就是,你是谁)
2、授权(就是,你能干什么)
3、攻击防护 (防止伪造身份)
这三点其实就是我们在应用中常用到的。现在有了spring-security框架,就使得我们代码实现起来非常简单。

下面就来跟着我一步一步来看,怎么使用它

三、使用步骤

1.maven依赖

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-security</artifactId>
</dependency>

版本号就跟着springboot版本走

2.application.properties文件

server.port=8080
server.servlet.context-path=/demo

spring.main.allow-bean-definition-overriding=true
spring.profiles.active=dev

这个时候,我们启动项目,就会在控制台看到这一行信息

红色框出来的就是spring-security为你自动分配的账号为 user 的密码。

3.访问接口

    你现在如果想要访问系统里面的接口,那必须要经过这个权限验证。
随便打开一个接口都会跳转到内置的一个登陆页面中

    我们看到,他跳转到一个地址为login的页面去了。这个时候我们输入用户名 user,密码为控制台打印出来的一串字符, 点击按钮 sign in 页面正常跳转到接口返回的数据。
我们发现,我们没有写一行代码,仅仅是在pom里面依赖了spring-boot-starter-security,框架就自动为我们做了最简单的验证功能,惊不惊喜意不意外。当然仅仅这么点当然不能满足我们项目的要求,不急,听我一步一步慢慢道来。

4.功能进阶

下面我们以最常见的企业级应用管理后台的权限为例
我们需要提出几个问题
1、用户的账号,密码保存在数据库中,登录的时候验证
2、用户登录成功后,每访问一个地址,后台都要判断该用户有没有这个菜单的权限,有,则放行;没有,则,拒绝访问。
3、系统中的一些静态资源则直接放行,不需要经过权限校验
4、系统中可能存在三种类型的资源地址
    ①:所有用户都能访问的地址(如:登录页面)
    ②:只要登录,就可以访问的地址(如:首页)
    ③:需要授权才能访问的地址

    针对上面提出的几个问题,我们设计最常用的权限表结构模型

sys_user(用户表:保存用户的基本信息,登录名,密码等等)sys_role(角色表:保存了创建的角色)sys_menu(菜单表:保存了系统可访问的资源(包含菝!4(1!4(=4(!!4(%=M йAA1% Q%=9})M=9}UQ4(M U9"B7"[Rg1"RkSBF` SBF`"SBF`"RSBF`Y n3Rg4(%fW4(V64(I=ЙAM)4(r/~r/?j r'R"B7Rg'R"R'k'' "G&7>b zs7r>2'2kj4(FΣRn ΣR:>r"Gr3vgz*U7"CΣRrv >kM!:ΣRB;&34(FvfC3 f7"_3vjjrv^rvfC3"%ZW3v:33v>j{fG:34(FB z3vB'7g3Rj!fWR"vfCjУ2"vfCjj{fr:gB4(FB z3vBv{k2'NRjZ?&O/r/ "GMUv2i^V#B;jrvMB3>rkB3^rV4(gr~jvfC:"z3"C4+{"G>jjo3[3vn"Cv{7v 3>#j*r"G  G:c4(Lb"GrjO3Vjr"Gj"GjVg4("vfC:"J33jZ"nknvfC:"3碾Bs&7jZ"[#vjnZroB;kkR2

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP