springBoot使用springSecurity入门详细配置,自定义登录,RBAC权限模型,数据库(JPA+mysql)验证登录,验证码,json格式交互等(下篇)

上篇:springBoot使用springSecurity入门详细配置,自定义登录,RBAC权限模型,数据库(mybatis+mysql)验证登录,验证码,json格式交互等(上篇)

写了:

  • springBoot项目使用security
  • 配置介绍
  • 自定义登录页面
  • 自定义登陆成功失败处理器
  • 添加验证码验证过滤

下篇开始

1.自定义用户认证的数据来源,内存以及数据库

前面我们一直使用security默认提供的user账号以及启动生产来登录,现在我们来配置自己用户信息;
security用户数据的配置在前面也已经介绍了,即配置类重写configure(AuthenticationManagerBuilder auth)方法
下面将介绍两种数据来源

  1. 直接配置在内存中
    这种比较简单,直接在配置文件yml配置即可
    spring:
      security:
        user:
          name: admin
          password: admin
    这样我们就配置一个用户在我们的内存中,重新启动项目你会发现控制台不再打印一个加密的密码,也就是说只有我们没有配置自己用户数据来源时security才会给我们提供默认的用户user,一旦我们配置自己的用户数据将不再提供默认用户user;

    成功!
     
  2. 配置数据库来源
    更多的时候我们的用户数据是放在数据库中,我们就需要配置数据库来源了,配置类重写configure(AuthenticationManagerBuilder auth)指定我们自定义数据来源;
    数据库:我使用的是mysql
    持久层框架:使用springJpa,之前一直使用的是mybatis,最近实习发现公司使用JPA比较多,所以这次顺便学学使用JPA

    1.使用Jpa,并使用其自动创建表功能,准备好数据库数据
    添加依赖
    <!--druid数据库连接池-->    
    <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid-spring-boot-starter</artifactId>
                <version>1.1.10</version>
            </dependency>
    <!--mysql-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.35</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
    在自己的mysql数据库建立一个security数据库
    配置Jpa以及数据库连接池
    spring:
      datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        driver: com.mysql.jdbc.Driver
        druid:
          username: 
          password: 
          url: jdbc:mysql://localhost:3306/security?useUnicode=true&characterEncoding=utf-8&useSSL=false
          initial-size: 1
          max-active: 5
          min-idle: 1
      jpa:
        show-sql: true  #显示sql语句
        hibernate:
          ddl-auto: update  #自动建表
        open-in-view: true
        properties:
          hibernate:
            enable_lazy_load_no_trans: true   #将Jpa的session生命周期扩大
    用户Entity类,实现UserDetails接口
    @Data
    @Entity
    @Table(name = "user",
            uniqueConstraints = {@UniqueConstraint(columnNames = {"username"}), @UniqueConstraint(columnNames = {"email"})})
    public class User implements UserDetails {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer u_id;
        @Column(nullable = false)
        @Length(min = 3, max = 20)
        private String username;
        @Column(nullable = false,length = 100)
        @JsonIgnore
        private String password;
        @Column(nullable = false)
        @Length(min = 3, max = 20)
        private String realName;
        @Column(nullable = false, length = 50)
        private String email;
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private Date registerDate;
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
        private Date lastLogin;
        private boolean isEnabled=true;
        private boolean isAccountNonExpired=true;
        private boolean isAccountNonLocked=true;
        private boolean isCredentialsNonExpired=true;
        @ManyToMany
        @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "u_id"),
                inverseJoinColumns = @JoinColumn(name = "r_id"))
        private List<Role> roleList;
        //    存储用户的权限
        @Transient
        private List<GrantedAuthority> authorities;
    
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj) return true;
            if (!(obj instanceof User)) return false;
            User user = (User) obj;
            boolean boo = this.username.equals(user.getUsername());
            return boo;
        }
    
        @Override
        public int hashCode() {
            return username != null ? username.hashCode() : 0;
        }
    
        @Override
        public String toString() {
            return "User{" +
                    "u_id=" + u_id +
                    ", username='" + username + '\'' +
                    ", password='" + password + '\'' +
                    ", realName='" + realName + '\'' +
                    ", email='" + email + '\'' +
                    ", registerDate=" + registerDate +
                    ", lastLogin=" + lastLogin +
                    ", isEnabled=" + isEnabled +
                    ", isAccountNonExpired=" + isAccountNonExpired +
                    ", isAccountNonLocked=" + isAccountNonLocked +
                    ", isCredentialsNonExpired=" + isCredentialsNonExpire
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值