说明
(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
领取专属 10元无门槛券
私享最新 技术干货