上篇:springBoot使用springSecurity入门详细配置,自定义登录,RBAC权限模型,数据库(mybatis+mysql)验证登录,验证码,json格式交互等(上篇)
写了:
- springBoot项目使用security
- 配置介绍
- 自定义登录页面
- 自定义登陆成功失败处理器
- 添加验证码验证过滤
下篇开始
1.自定义用户认证的数据来源,内存以及数据库
前面我们一直使用security默认提供的user账号以及启动生产来登录,现在我们来配置自己用户信息;
security用户数据的配置在前面也已经介绍了,即配置类重写configure(AuthenticationManagerBuilder auth)方法
下面将介绍两种数据来源
- 直接配置在内存中
这种比较简单,直接在配置文件yml配置即可
这样我们就配置一个用户在我们的内存中,重新启动项目你会发现控制台不再打印一个加密的密码,也就是说只有我们没有配置自己用户数据来源时security才会给我们提供默认的用户user,一旦我们配置自己的用户数据将不再提供默认用户user;spring: security: user: name: admin password: admin
成功!
- 配置数据库来源
更多的时候我们的用户数据是放在数据库中,我们就需要配置数据库来源了,配置类重写configure(AuthenticationManagerBuilder auth)指定我们自定义数据来源;
数据库:我使用的是mysql
持久层框架:使用springJpa,之前一直使用的是mybatis,最近实习发现公司使用JPA比较多,所以这次顺便学学使用JPA
1.使用Jpa,并使用其自动创建表功能,准备好数据库数据
添加依赖
在自己的mysql数据库建立一个security数据库<!--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>
配置Jpa以及数据库连接池
用户Entity类,实现UserDetails接口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生命周期扩大@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

最低0.47元/天 解锁文章
2991

被折叠的 条评论
为什么被折叠?



