您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~

虽然说互联网是一个非常开发、几乎没有边界的信息大海,但说起来有点奇怪的是,每个稍微有点规模的互联网应用都有自己的权限系统,而权限的本质却是是封闭的——开放的互联网有着封闭的权限。

现在做Java后端应用开发用的都是Spring框架,但在Spring诞生之前,却是Servlet的天下,都是根据业务规则各自实现自己的Servlet。权限系统也是一样,在没有统一的权限系统规范之前,各个Java业务系统都是根据需求自己实现对功能的授权管理。这种早期的权限系统称之为ACL(Access Control List,访问控制列表)。等发展到一定程度,工程师们发现给用户一个个地授权能访问哪个功能或不能访问哪个功能,实在是太麻烦了,于是就出现了RBAC(Role-Based Access Control,基于角色的访问控制)。并由此出现了一系列的演变,之后又出现了ABAC(Attribute-Based Access Control,基于属性的访问控制)和CBAC(Claims-Based Access Control,基于声明的访问控制)。其中ABAC又称为PBAC(Policy-Based Access Control,基于策略的访问控制)。

这一系列的名称让人有点乱。不过目前在一般规模的应用中,还是以RBAC为主。至于像什么BAT这种级别的互联网应用,早就超出了这种「权限」的范畴了。

早期的RBAC作为一个相对独立的开发内容,工作量其实还是比较大的,而且必须考虑到一些动态的变化,所以安全性、稳定性都没办法得到100%的保证。于是Spring Security出现了。它是一个依托于Spring的RBAC权限管理框架,在Spring Boot之前,Shiro用的更多,因为Spring Security相对来说配置比较繁琐,属于重量级的权限管理框架。所以SpringMVC + Shiro的组合更常见。在Spring Boot出现之后,为Spring Security提供了更友好的配置方案。

Spring Security的核心功能主要包括:

1、认证(是谁-Who)

2、授权(能干什么-What)

3、防伪(身份伪造)

Spring Security的核心就是一组由FilterChain过滤器组成的过滤器链,逐步来实现所有需要权限介入的管理工作。

这里就从登录开始,完成一个前后端分离的微型应用,以接口测试工具代替前端调用。

先在idea上创建一个新的Spring Initializer项目:

然后再创建数据库表:

-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS sys_user;
CREATE TABLE sys_user (
id int(11) NOT NULL AUTO_INCREMENT COMMENT '用户编码',
username varchar(255) NOT NULL DEFAULT '' COMMENT '用户名',
password varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updatetime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户表'; -- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS sys_role;
CREATE TABLE sys_role (
id int(11) NOT NULL AUTO_INCREMENT COMMENT '角色编码',
name varchar(255) NOT NULL COMMENT '角色名称 ',
createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updatetime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='角色表'; -- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS sys_user_role;
CREATE TABLE sys_user_role (
userid int(11) NOT NULL COMMENT '用户编码',
roleid int(11) NOT NULL COMMENT '角色编码',
createtime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updatetime datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (userid,roleid) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='用户角色表';

初始化数据:

INSERT INTO sys_user VALUES (1, 'admin', '123456', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO sys_user VALUES (2, 'manager', '123456', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO sys_user VALUES (3, 'employee', '123456', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); INSERT INTO sys_role VALUES (1, 'ROLE_ADMIN', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO sys_role VALUES (2, 'ROLE_MANAGER', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO sys_role VALUES (3, 'ROLE_EMPLOYEE', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); INSERT INTO sys_user_role VALUES (1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO sys_user_role VALUES (2, 2, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
INSERT INTO sys_user_role VALUES (3, 3, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);

修改pom文件:

配置application.properties:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://172.16.185.129:3306/vmall?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
spring.datasource.username=root
spring.datasource.password=123456

感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

Spring Security(1)的更多相关文章

  1. Spring Security(08)——intercept-url配置

    http://elim.iteye.com/blog/2161056 Spring Security(08)--intercept-url配置 博客分类: spring Security Spring ...

  2. Spring Security(三)

    Spring Security(三) 个性化用户认证流程 自定义登录页面 在配置类中指定登录页面和接收登录的 url @Configuration public class BrowserSecuri ...

  3. Spring Security(二)

    Spring Security(二) 注:凡是源码部分,我已经把英文注释去掉了,有兴趣的同学可以在自己项目里进去看看.:-) 定义用户认证逻辑 用户登录成功后,用户的信息会被 Security 封装在 ...

  4. Spring Security(一)

    Spring Security(一) 基本原理 前言 Spring Security核心功能 认证(你是谁) 授权(你能干什么) 攻击防护(防止伪造身份) Srping Security基本原理 项目 ...

  5. 【权限管理系统】Spring security(三)---认证过程(原理解析,demo)

      在前面两节Spring security (一)架构框架-Component.Service.Filter分析和Spring Security(二)--WebSecurityConfigurer配 ...

  6. SpringBoot集成Spring Security(7)——认证流程

    文章目录 一.认证流程 二.多个请求共享认证信息 三.获取用户认证信息 在前面的六章中,介绍了 Spring Security 的基础使用,在继续深入向下的学习前,有必要理解清楚 Spring Sec ...

  7. SpringBoot集成Spring Security(6)——登录管理

    文章目录 一.自定义认证成功.失败处理 1.1 CustomAuthenticationSuccessHandler 1.2 CustomAuthenticationFailureHandler 1. ...

  8. SpringBoot集成Spring Security(5)——权限控制

    在第一篇中,我们说过,用户<–>角色<–>权限三层中,暂时不考虑权限,在这一篇,是时候把它完成了. 为了方便演示,这里的权限只是对角色赋予权限,也就是说同一个角色的用户,权限是 ...

  9. SpringBoot集成Spring Security(4)——自定义表单登录

    通过前面三篇文章,你应该大致了解了 Spring Security 的流程.你应该发现了,真正的 login 请求是由 Spring Security 帮我们处理的,那么我们如何实现自定义表单登录呢, ...

  10. SpringBoot集成Spring Security(2)——自动登录

    在上一章:SpringBoot集成Spring Security(1)——入门程序中,我们实现了入门程序,本篇为该程序加上自动登录的功能. 文章目录 一.修改login.html二.两种实现方式 2. ...

随机推荐

  1. 【Android 逆向】动态调试AliCrackme_1

    1 试玩 apk # 安装APK到真机 adb install AliCrackme_1.apk 打开apk,投石问路,输入123试一下 2 将apk 拖入androidKiller,得到反编译的sm ...

  2. 超详细的格式化输出(format的基本玩法)

    一.format的基本玩法 一.什么是format format是字符串内嵌(字符串内嵌:字符串中再嵌套字符串,加入双引号或单引号)的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符串 fo ...

  3. 编译安装Erlang+RabbitMQ

    楔子 由于国内信创越来越火,客户现场也开始使用国产操作系统替换CentOS之类的开源操作系统,最近做实施的同事找到我,说现场是ARM架构的操作系统编译安装RabbitMQ一直提示无法启动也没有日志文件 ...

  4. 基于koa模块和socket.io模块搭建的node服务器实现通过jwt 验证来渲染列表、私聊、群聊功能

    1. 具体代码在需要的下载 https://gitee.com/zyqwasd/socket 效果: 2. package.json文件 1. 下载基本的模块  修改了start 脚本  nodemo ...

  5. 【前端】在浏览器控制台,直接发Ajax请求

    我们在日常的开发的过程中,经常需要前端测试发送请求测试一些数据.但是由于一些session,cookie的存在,我们无法在postman上创建一些会话.那么这样,我们就可以在浏览器上直接发送Ajax请 ...

  6. while.for循环和基本数据类型内置方法

    while循环补充说明 流程控制之for循环 基本数据类型内置方法 内容详细 1.死循环 真正的死循环是一旦执行,Cpu的功耗会急速上升 知道系统采取紧急措施 所以 尽量不要让cpu长时间不断运算. ...

  7. SpringBoot的starter到底是什么?

    前言 我们都知道,Spring的功能非常强大,但也有些弊端.比如:我们需要手动去配置大量的参数,没有默认值,需要我们管理大量的jar包和它们的依赖. 为了提升Spring项目的开发效率,简化一些配置, ...

  8. 新电脑搭建vue项目步凑

    电脑必备软件集合: Chrome,FF Nodejs VS code (ATOM...) GIT || SVN 插件类:postman 美术类:ps,pxcock等,自己喜欢的就行 翻译类:有道词典 ...

  9. PHP全栈开发(七):PHP与MySQL存储交互(2.插入、读取)

    <?php $servername = "localhost"; $username = "root"; $password = "beijin ...

  10. Hive 自定义UDF操作步骤

    Hive 自定义UDF操作步骤 需要自定义类,然后继承UDF 然后在方法envluate()方法里面实现具体的业务逻辑,打包上传到linux(以免出错打包成RunningJar) 一.创建临时函数 ( ...