# demo-druid
**Repository Path**: pcoy/demo-druid
## Basic Information
- **Project Name**: demo-druid
- **Description**: druid数据源监控使用+mybatis-plus使用分享
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2023-07-21
- **Last Updated**: 2023-07-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# demo-druid
#### 介绍
druid数据源监控使用+mybatis-plus使用分享
#### 软件架构
springboot+druid+mybatis-plus
#### 安装教程
1. xxxx
2. xxxx
3. xxxx
#### 使用说明
目的:本代码主要为了实现shiro+redis实现后台权限管理 以下是整合流程说明
一、准备工作
1. pom文件种引入mybatis-plus,shiro,redis,thymeleaf,kaptcha以及相关的jar包
2. 配置验证码生成类CaptchaConfig(支持随机字符串验证码和数字验证码)
3. 配置mybatisPlus分页插件类
4. 实现WebMvcConfigurer类,配置webcofig实现放重复提交等功能
二、结合shiro的拦截器功能
1、 认识shiro中默认的拦截器:
一、身份验证相关的
authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter
基于表单的拦截器;如 “`/**=authc`”,如果没有登录会跳到相应的登录页面登录;
主要属性:usernameParam:表单提交的用户名参数名( username);
passwordParam:表单提交的密码参数名(password);
rememberMeParam:表单提交的密码参数名(rememberMe);
loginUrl:登录页面地址(/login.jsp);
successUrl:登录成功后的默认重定向地址;
failureKeyAttribute:登录失败后错误信息存储 key(shiroLoginFailure);
logout org.apache.shiro.web.filter.authc
退出拦截器,主要属性:redirectUrl:退出成功后重定向的地址(/); 示例 “/logout=logout”
authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
Basic HTTP 身份验证拦截器,主要属性: applicationName:弹出登录框显示的信息(application);
user org.apache.shiro.web.filter.authc.UserFilter
用户拦截器,用户已经身份验证 / 记住我登录的都可;示例 “/**=user”
anon org.apache.shiro.web.filter.authc.AnonymousFilter
匿名拦截器,即不需要登录即可访问;一般用于静态资源过滤;示例 “/static/**=anon”
2、实现登录帐号控制过滤器KickoutSessionFilter 作用:实现控制用户允许最多同时几个人登录
3、实现验证码过滤器CaptchaValidateFilter 作用:在登陆接口拦截请求,要求用户做验证码的验证
AccessControlFilter:可以发现他是调用的isAccessAllowed方法和onAccessDenied方法,
只要两者有一个可以就可以了,从名字中我们也可以理解,他的逻辑是这样:
先调用isAccessAllowed,如果返回的是true,则直接放行执行后面的filter和servlet,
如果返回的是false,则继续执行后面的onAccessDenied方法,
如果后面返回的是true则也可以有权限继续执行后面的filter和servelt
4、实现用户退出过滤器LogoutFilter 重写的原因主要是加记录用户退出日志以及清理缓存
三、实现缓存管理器
四、自定义Realm(shiro中的用户信息以及用户所对应的权限都是需要我们从数据库查询出来然后传给shiro相对应的接口)
准备工作:自定义realm首先我们就要写一个realm,而这个realm我们一般要继承AuthorizingRealm类
1、授权: 角色和权限加入AuthorizationInfo认证对象
执行doGetAuthorizationInfo的时机(获得授权信息方法 不是主动调用的,而是去校验是否有某权限时才会去调用):
1、1、subject.hasRole(“admin”) 或subject.isPermitted(“admin”):自己去调用这个是否有什么角色或者是否有什么权限的时候;
2、@RequiresRoles(“admin”) :在方法上加注解的时候;
3、3、[@shiro.hasPermission name =“admin”][/@shiro.hasPermission]:在页面上加shiro标签的时候,即进这个页面的时候扫描到有这个标签的时候
执行doGetAuthenticationInfo时机如下
当调用Subject currentUser = SecurityUtils.getSubject();
2、登陆认证
3、清理所有用户授权信息缓存
4、自定义sessionFactory会话 作用:在当前session中放入请求的浏览器,ip,操作系统等信息
5、自定义任务调度器SpringSessionValidationScheduler 继承SessionValidationScheduler
SessionValidationScheduler:
shiro提供了会话验证调度器,用于定期的验证会话是否已过期,如果过期将停止会话;
出于性能考虑,一般情况下都是获取会话时来验证会话是否过期并停止会话的;
但是如在web环境中,如果用户不主动退出是不知道会话是否过期的,
因此需要定期的检测会话是否过期,Shiro提供了会话验证调度器SessionValidationScheduler。
6、实现会话管理器OnlineWebSessionManager 主要功能如下:
1、加入缓存管理器
2、删除过期的session
3、设置全局session超时时间
5、去掉 JSESSIONID
6、定义要使用的无效的Session定时调度器(SpringSessionValidationScheduler)
7、是否定时检查session
8、自定义sessionFactory
五、实现安全管理器SecurityManager
1、设置UserRealm
2、设置记住我功能CookieRememberMeManager:(实现用户登录后,浏览器关闭后,再次打开浏览器无需重新登录的功能RememberMe)
3、注入缓存管理器
4、设置session管理器
六、代码功能实现
1、登录接口:/login,实现shiro的认证登录
2、用户权限相关表:sys_user、sys_menu、sys_role、sys_user_role、sys_role_menu
3、实现所有系统相关异常类,实现全局异常处理类GlobalExceptionHandler
前端技术基础
一、Thymeleaf基础语法
1.5 日期格式化
1.2 选择变量表达式 *{} 如:
1.3 URL表达式 @{}需要 Thymeleaf 对 URL 进行渲染,那么务必使用 th:href,th:src 等属性 th:href="@{/system/user/profile}
1.4 判断 thymeleaf有四种判断形势:th:if/th:unless、逻辑运算(and、or、not)、三目运算符、switch
1.5 日期格式化
1.6 循环 th:each
#### 参与贡献
1. Fork 本仓库
2. 新建 Feat_xxx 分支
3. 提交代码
4. 新建 Pull Request
#### 特技
1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)