标签 Springsecurity 下的文章

一,项目环境

  • SpringBoot2.2.8
  • SpringSecurity
  • Gradle
  • Mysql
    随便一说:开发工具用Manjaro i3wm下的VSCode,有点香

二,数据库表字段及建表相关操作

  • 用户id,
  • 用户名,
  • 密码,
  • 手机号,
  • 账户锁定状态,
  • 用户使用状态,
  • 用户创建时间,
  • 用户最后登录时间
    (当前示例还没涉及用户权限相关内容哦,预告)

建库语句

CREATE DATABASE /*!32312 IF NOT EXISTS*/`fisha_demo` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;

建表语句

CREATE TABLE fisha_demo.fisha_user (
  `user_id` bigint(20) NOT NULL COMMENT '用户id,mybatis_plus雪花算法',
  `account` varchar(50) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '用户账号',
  `password` varchar(255) DEFAULT NULL COMMENT '用户加密密码',
  `phone` varchar(20) DEFAULT NULL COMMENT '手机号码(国际国内)',
  `locked` tinyint(2) DEFAULT '1' COMMENT '账户是否被锁定。1没被锁,2被锁(用户登录次数超出限制后会被锁定)',
  `deleted` tinyint(2) unsigned DEFAULT '1' COMMENT '账户状态。1正在使用,2被逻辑删除',
  `gmt_created` datetime DEFAULT NULL COMMENT '注册时间',
  `gmt_modified` datetime DEFAULT NULL COMMENT '最后活跃时间',
  PRIMARY KEY (`user_id`) COMMENT '主键索引'
)
ENGINE=InnoDB
DEFAULT CHARSET=utf8
COMMENT='fisha用户实例表';

授权相关

项目使用的数据库用户密码为:java just1508,该用户拥有fisha_demo库所有的操作权限
create user 'java'@'localhost' identified by 'just1508'
grant all privileges on fisha_demo.* to 'java'@'localhost'

- 阅读剩余部分 -

使用Java配置类配置SpringSecurity

终于要开始配置SpringSecurityla,鸡冻鸡冻!!

第一步、先找个漂亮的登录页面修改修改

比如我找的这个:https://down.shafish.cn/web/disanfanglogin.zip,把它解压放在你的项目中,顺便把index.html改为login.html

厚颜无耻
厚颜无耻+

  1. 配置login.html form标签内容

    // 加上action和method
    <form class="login100-form validate-form" action="/doLogin" method="post">
    ...
    </form>
  2. 修改用户名和密码的input.name属性值为username password

    // username和password
    <input class="input100" type="text" name="username" placeholder="请输入用户名" autocomplete="off">
    <input class="input100" type="password" name="password" placeholder="请输入密码">
  3. 登录按钮加上提交type

    // submit
    <button class="login100-form-btn" type="submit">登 录</button>

    OK

- 阅读剩余部分 -

先跑一个简单的demo,初步认识SpringSecurity

第一步、新建SpringBoot工程(伪第一步)

启动项目时选择导入springwebspringsecurity这两个依赖,在项目启动成功后,SpringSecurity因为SpringBoot的自动配置,已经为项目的所有接口都提供了访问保护。

第二步、写个controller接口测试url是否被保护

@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello";
    }
}

第三步、启动项目,测试接口

  1. 启动项目时,可以看到控制台输出了默认的登录密码,其实就是一串uuid
  2. 浏览器访问测试接口http://localhost:8080/hello
    你可以明确地看到url自动跳转到了http://localhost:8080/login并提示输入账号密码。
  3. 输入账号:user
  4. 密码:控制台输出的uuid


    就可以正常显示接口的返回值 -> hello

- 阅读剩余部分 -

一、SpringSecurity是什么、可以做什么

SpringSecurity是一个可以提供认证、授权的服务框架,是Spring家族的一员,为Spring框架提供了给力的安全支持。

那问题来了,什么是认证,又什么是授权。
  • 简单来讲认证就是检查你的登录信息,比如说使用 用户名+密码 登录一个系统,如果账号密码匹配成功,就可以理解为认证成功;
  • 授权就规定了这个登录系统的用户可以做些什么事情。比如说小于在百度帖吧注册了个号,想把那个sb楼主写的垃圾文章删掉,这如果真能删掉,那现在的百度贴吧不是没落而是应该直接被人道毁灭了。这就是授权,什么人能做什么事,什么人不能做什么事。

在SpringBoot出现之前,大部分开发者使用的安全框架应该是ApacheShrio。没有SpringBoot自动配置的SpringSecurity,学习成本相对高点,配置也相对复杂,属于重量级的安全框架,让很多伪开发者望而却步,而SpringBoot出现后,上面那些问题得到了一定程度的缓解,所以SpringSecurity就跟着火了起来。(有多火?入夏了,能不火吗,而且还很热)

为什么说SpringSecurity是重量级的安全框架,因为她对认证授权安全等方面提供了巴适的支持。比如说Oauth2、单点登录、匿名登录、对特定接口授权、对特定对象授权、抵御XSS/CSRF攻击等等。总有那么几点合你心水。

等等,你是不是漏了什么东西,为什么是为Spring框架提供支持呢?emmmm,你一个做Java开发的,能不用Spring吗??