最近学习了模仿制作天猫商场,做一些必要的笔记,一来是对自己学习的知识的巩固,二来对有同样问题的人有参考作用
一 概述
1 maven配置
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.2</version>
</dependency>
2 核心概念
-
Subject
-
代表当前正在执行操作的用户,但Subject代表的可以是人,也可以是任何第三方系统帐号。当然每个subject实例都会被绑定到SercurityManger上。
SecurityManger
-
SecurityManager是Shiro核心,主要协调Shiro内部的各种安全组件,这个我们不需要太关注,只需要知道可以设置自定的Realm。
Realm
-
用户数据和Shiro数据交互的桥梁。比如需要用户身份认证、权限认证。都是需要通过Realm来读取数据。
3 主要类
springboot中集成shiro相对简单,只需要两个类:一个是shiroConfig类,一个是CustonRealm类。
-
ShiroConfig类
-
顾名思义就是对shiro的一些配置,相对于之前的xml配置。包括:过滤的文件和权限,密码加密的算法,其用注解等相关功能。
CustomRealm类
-
自定义的CustomRealm继承AuthorizingRealm,用来实现认证和权限分配,并且重写父类中的doGetAuthorizationInfo(权限相关)、doGetAuthenticationInfo(身份认证)这两个方法。
二 代码实现
1 自定义Realm
UserService的实现参考我的下一篇文章springboot整合shiro之数据库实现[dbReaml实现]
public class CustomRealm extends AuthorizingRealm {
@Autowired
UserService userService;
/**
* 进行权限分配
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
int userId = (Integer) SecurityUtils.getSubject().getPrincipal();
List<String> roles = userService.getRolesByUser(userId);
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
Set<String> rolesSet = new