废话不多说 , 咱们直接接上回
上一篇我们讲了如何使用Springboot框架整合Nosql,并于文章最后部分引入了服务端Session的概念
而早在上上一篇中 , 我们则已经讲到了如何使用Springboot框架整合Mybatis/MybatisPlus实现业务数据的持久化(写入数据库)
本篇我们把关注点放在一个于这两部分有共同交集的内容——安全管理,并且引入我们今天的主角——Shiro框架
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理 。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序 。Shiro框架包含三个核心组件:
—— 来自百度百科
Subject —— 泛指当前与Shiro交互中的实体,可以是用户或者某后台进程【之五 2流高手速成记:Springboot整合Shiro实现安全管理】Shiro框架还包含有其他诸多概念 , 为降低大家的心智负担,这些我们暂且不谈 , 文末会给大家推荐延展阅读的相关文章
SecurityManager —— Shiro的核心组件,对内管理各种组件实例,对外提供各种安全服务
Realm —— Shiro与安全数据之间的桥接器
还是老规矩直接上干货,以完整的实例让大家对【如何基于Shiro实现权限的细粒度控制】有一个整体上的认知
文章插图
文章插图
不知道大家会不会觉得项目结构突然变复杂?别担心,接下来我会给大家逐一拆解
1. 创建数据表首先是角色表——role
文章插图
文章插图
然后是用户表——user
文章插图
文章插图
最后是权限表——permission
文章插图
文章插图
2. 创建三个对应的Mapperpackage com.example.hellospringboot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.hellospringboot.model.Role;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;@Mapper@Repositorypublic interface RoleMapper extends BaseMapper<Role> {}package com.example.hellospringboot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.hellospringboot.model.User;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;@Mapper@Repositorypublic interface UserMapper extends BaseMapper<User> {}package com.example.hellospringboot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.hellospringboot.model.Permission;import org.apache.ibatis.annotations.Mapper;import org.springframework.stereotype.Repository;@Mapper@Repositorypublic interface PermissionMapper extends BaseMapper<Permission> {}
这里我们用到了上上一节讲到的内容3. 接下来是Service及其实现类package com.example.hellospringboot.service;import com.example.hellospringboot.model.Role;public interface RoleService {Role findRoleById(int id);}package com.example.hellospringboot.service.impl;import com.example.hellospringboot.mapper.RoleMapper;import com.example.hellospringboot.model.Role;import com.example.hellospringboot.service.RoleService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Servicepublic class RoleServiceImpl implements RoleService {@AutowiredRoleMapper mapper;public Role findRoleById(int id){Role role = mapper.selectById(id);return role;}}package com.example.hellospringboot.service;import com.example.hellospringboot.model.User;public interface UserService {boolean checkUserByUsernameAndPassword(String userName, String passWord);User findUserByUserName(String userName);}package com.example.hellospringboot.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.example.hellospringboot.mapper.UserMapper;import com.example.hellospringboot.model.User;import com.example.hellospringboot.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserServiceImpl implements UserService {@AutowiredUserMapper mapper;public boolean checkUserByUsernameAndPassword(String userName, String passWord){QueryWrapper<User> wrapper = new QueryWrapper<User>();wrapper = wrapper.eq("user_name", userName).eq("pass_word",passWord);List<User> userList = mapper.selectList(wrapper);return userList.size() > 0;}public User findUserByUserName(String userName){QueryWrapper<User> wrapper = new QueryWrapper<User>();wrapper = wrapper.eq("user_name", userName);User user = mapper.selectOne(wrapper);return user;}}
这里的Mapper会辅助于后续的安全数据读取
推荐阅读
- 手机卡反应迟钝怎么处理(让安卓手机流畅100倍)
- 浅尝 ECDHE 协议流程
- 装配 SpringBoot自动配置流程
- Arctic 基于 Hive 的流批一体实践
- 流氓迈克菲软件如何卸载(如何关闭迈克菲自动删除软件)
- 深空之眼流萤岚雾休刻印如何搭配比较合适
- Java 8 Stream API 引入和使用
- 45.限流Throttling及源码解析
- 弹壳特攻队平民秒杀流怎么玩
- 流浪方舟核心怎么选择