# demo-shiro **Repository Path**: dudemonkey/demo-shiro ## Basic Information - **Project Name**: demo-shiro - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-17 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # shiro学习项目 ## 记录demo项目,以此学习 ##1.技术栈 - springboot - shiro - mybatis - mysql ##2.springboot+shiro ###2.1.自定义realm ```java public class MyRealm extends AuthorizingRealm{} ``` 简单做登录认证 ###2.2.做shiro的配置 ```java @Configuration public class ShiroConfig {} ``` 其中需要配置的内容: 1. realm - MyRealm 2. SecurityManager 3. FilterFactory - 重要,控制允许访问的资源 4. 开启shiro注解支持(多用于restful接口中对访问的资源做权限拦截) > 其他资源按常规mvc划分访问即可 #### shiro会话 默认会话管理方式,简单测试方式: ```java import javax.servlet.http.HttpSession; // 代码省略 /**/ @GetMapping("/show") public String show(HttpSession session){ Enumeration attributeNames = session.getAttributeNames(); while (attributeNames.hasMoreElements()){ String key = attributeNames.nextElement().toString(); Object value = session.getAttribute(key); System.out.println(String.format("key : %s , value : %s ", key,value)); } return "成功"; } ``` 输出结果: ```shell key : org.apache.shiro.subject.support.DefaultSubjectContext_AUTHENTICATED_SESSION_KEY , value : true key : org.apache.shiro.web.session.HttpServletSession.HOST_SESSION_KEY , value : 0:0:0:0:0:0:0:1 key : org.apache.shiro.subject.support.DefaultSubjectContext_PRINCIPALS_SESSION_KEY , value : User(id=2, name=hhhhh, passwd=222222) ``` 可知shiro的会话管理 默认是借助servlet的session来做的管理。 ###2.3.关于SessionManager shiro中的SessionManager由SecurityManager管理 ##3.springboot+shiro+redis ###3.1.自定义会话管理 通过自定义会话管理的方式,将认证信息存储到redis中。存储形式:key: sessionId value:User 经验证,存储sessionId 会有浪费现象。若提交无效请求过多,redis会存储大量无效sessionId,没有意义。 替换思路:即可发令牌。