🚩 A project to practice Shiro,学习shiro时的小demo
- application code:应用程序代码,代表shiro的程序入口。将用户的数据用shiro的api传递到shiro,由shiro处理数据。
- subject:每一个subject代表一个用户。用shiro对用户数据进行封装,把数据给token(账号和密码生成令牌)
- securitymanager:安全中心,所有的数据都会经过安全中心,对用户进行管理
- realm:域,连接的数据源头,可以是数据库,也可以是文件
- 创建项目并编写Controller进行测试
- 导入shiro-spring依赖
- 编写shiroconfig(三大对象)
- ShiroFilterFactoryBean
- DefaultWebSecurityManager
- 自定义realm对象
- 创建UserRealm对象继承AuthorizingRealm方法
- 实现认证与授权方法
- 在shiroconfig中注入spring
正确的Themeleleaf命名空间才会有th标签的提示
<html lang="en" xmlns:th="http://www.thymeleaf.org">
- anon:无需认证就可以访问
- authc:必须认证才能访问
- user:必须拥有记住我功能才能访问
- perms:拥有对某个资源的权限才能访问
- role:拥有某个角色权限才能访问
配置过滤器时支持通配符
- 被拦截以后跳转到登录页面login
- 获取当前用户
- 封装当前用户登录信息,用户名密码作为token
- 执行登录方法,传入token令牌
- 在realm里面获取令牌信息对用户名密码进行判断
- 登录没有异常则登录成功
authc认证方法里面自带了多种异常,用户名错误、密码错误etc 用户名自己判断,密码shiro进行判断 自定义数据模拟测试
- 连接数据库配置yml文件
- mapper、mapper.xml、service、serviceImpl (Test测试)
- 测试成功后将realm中手动模拟的数据跟换为数据库中的数据
type=Unauthorized, status=401(401表示未授权错误) 没有授权则无妨访问网页,例如登录成功后才能访问其他网页 根据数据库中不同用户的权限信息访问不同的功能
- 与拦截相似put是采用perms,表示拥有对某个资源的权限才能访问
- 编写未授权Controller,没有授权时返回提示信息
- 在userrealm里面可以添加需要授权的信息,授权过后就可以访问了(手动模拟权限信息)
- 在数据库中创建perms属性,作为权限信息(从数据库获取权限信息)
- 从数据库中获取权限信息,设置用户的权限
- 编写themele-shiro pom文件
- shiroconfig配置shirodialect,整合Themeleleaf与shiro
- 结合后进行判断有那个权限就显示那个按钮
个人感觉还是springsecurity好用一些,但是shiro的可定制化比较高