218.Spring Boot+Spring Security:基于内存数据库的身份认证和角色授权

说明

(1)JDK版本:1.8

(2)Spring Boot 2.0.6

(3)Spring Security 5.0.9

(4)Spring Data JPA 2.0.11.RELEASE

(5)hibernate5.2.17.Final

(6)hsqldb2.4.1

需求缘起

在前面我们使用基于内存的方式体验了下Spring Security,在实际项目中,都是需要数据库进行操作的,本节使用hsqldb内存数据库进行说明。

编码思路

这里我们使用的是Spring Data JPA进行操作数据库,所以需要添加相关的依赖;其次就是需要定义一个保存用户基本的实体类;再者需要定义相应的服务获取用户的信息;最后重写UserDetailsService的loadUserByUsername方法从数据库中获取用户信息,传给Spring Security进行处理。

一、基于内存数据库的身份认证和角色授权

1.1添加依赖

在pom.xml文件中添加SpringData JPA和hsqldb的依赖:

1.2创建实体类

创建UserInfo实体类:

1.3创建Repository

创建和数据库交互的UserInfoRepository:

1.4创建Service

创建UserInfoService:

创建UserInfoService的实现类:

1.5自定义UserDetailsService

自定义一个UserDetailsService,取名为CustomUserDetailService,该类需要实现接口UserDetailsService,主要是实现loadUserByUsername方法:

说明:

(1)通过username获取用户的信息。

(2)定义一个User(实现了接口UserDetails)对象,返回用户的username,passowrd和权限列表。

(3)需要注意,定义角色集的时候,需要添加前缀“ROLE_”。

(4)这里的密码需要使用PasswordEncoder进行加密,否则会报“无效的凭证”。

1.6初始化测试账号

这里我们使用一个DataInit类,初始化两个账号admin/123和user/123:

1.7启动测试

(1)测试账号:user/123

启动应用访问地址:

http://127.0.0.1:8080/hello/helloUser

自动跳转到登录页面,输入账号user/123,可以看到页面:

紧接着访问地址:

http://127.0.0.1:8080/hello/helloAdmin

访问被拒绝:

(2)测试账号:admin/123

现在没有退出按钮,只能重新启动应用程序,然后输入账号admin/123,上面的两个地址应该都是可以正常访问的。

历史文章

à悟空学院:http://t.cn/Rg3fKJD

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181203B08IYL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券