4.从零开始搭建基于SpringCloud的京东整站_用户微服务_后台登录鉴权
本次目标
实现后台登录鉴权功能。
接口文档
1.后台管理员登录
页面访问地址:http://admin/pages/main/login.html
2.接口描述
js请求地址 | http://{ip:port}/user/adminLogin |
---|---|
后台接收 | user/adminLogin |
请求方式 | POST |
请求参数 |
String username;用户名 String psw;密码 String valicaod;验证码 |
返回数据 |
返回SysResult对象的json,其结构: Integer status; 200表示成功,其他表示失败。 String msg;成功返回 “ok”,失败返回其他信息。 Object data;根据需求携带其他数据。 |
数据库用户权限相关表设计
用户角色表
CREATE TABLE `tsb_role` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色ID',`parent_id` int(11) NOT NULL DEFAULT '0' COMMENT '父级角色ID',`role_name` varchar(64) NOT NULL COMMENT '角色名称',`gen_time` bigint(20) DEFAULT NULL COMMENT '创建时间',`description` varchar(200) DEFAULT NULL COMMENT '角色描述',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
用户角色关联表
CREATE TABLE `tsb_common_user_role_relation` (`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '记录标识',`uid` bigint(20) NOT NULL COMMENT '用户id',`rid` bigint(20) NOT NULL COMMENT '角色id',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
权限表
CREATE TABLE `tsb_right` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`parent_id` bigint(20) NOT NULL COMMENT '父权限',`right_name` varchar(200) NOT NULL COMMENT '权限名称',`description` varchar(200) DEFAULT NULL COMMENT '描述',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
角色权限关联表
CREATE TABLE `tsb_role_right_relation` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`role_id` bigint(20) NOT NULL COMMENT '角色id',`right_id` bigint(20) NOT NULL COMMENT '权限id',`right_type` tinyint(4) NOT NULL COMMENT '(0:无权访问,1:有权访问)',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
代码实现
控制层
package liwen.zhao;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;@SpringBootApplication
@MapperScan("liwen.zhao.mappers")
@EnableEurekaClient
public class JDUserMicroserviceStarter {public static void main(String[] args) {SpringApplication.run(JDUserMicroserviceStarter.class,args);}
}
业务层
接口类:
package liwen.zhao.service;import liwen.zhao.common.jd.pojo.CommonUser;
import liwen.zhao.common.jd.vo.SysResult;public interface UserService {CommonUser findCommonUserByName(String userName);SysResult adminLogin(String userName, String psw, String action);
}
实现类:
package liwen.zhao.service;import liwen.zhao.common.jd.pojo.CommonUser;
import liwen.zhao.common.jd.pojo.Right;
import liwen.zhao.common.jd.pojo.Role;
import liwen.zhao.common.jd.utils.MD5Util;
import liwen.zhao.common.jd.vo.SysResult;
import liwen.zhao.mappers.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class UserServiceImpl implements UserService {@Value("${solt}")private String solt;@AutowiredUserMapper userMapper;@Overridepublic CommonUser findCommonUserByName(String userName) {return userMapper.findCommonUserByName(userName,"user/adminLogin");}@Overridepublic SysResult adminLogin(String userName, String psw, String action) {//密码加盐并md5psw= MD5Util.md5(psw+solt);CommonUser commonUser;try{commonUser=userMapper.findCommonUserByNameAndPswAndAction(userName,psw,action);}catch (Exception e){e.printStackTrace();return SysResult.build(500,"登录异常",null);}if(commonUser==null){return SysResult.build(500,"用户名或密码错误",null);}//判断该用户具有后台登录权限boolean ifOk=false;List<Role> roles=commonUser.getRoles();if(null!=roles&&roles.size()>0){for(Role role:roles){if(ifOk){break;}List<Right> rights=role.getRightList();if(null!=rights&&rights.size()>0){for(Right right:rights){if(1==right.getRight_type()){ifOk=true;break;}}}}}if(!ifOk){return SysResult.build(500,"无权访问!",null);}return SysResult.build(200,"",null);}
}
MyBatis Mapper文件配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="liwen.zhao.mappers.UserMapper"><resultMap id="cus" type="liwen.zhao.common.jd.pojo.CommonUser"><id column="id" property="id"/><result column="userName" property="userName"/><collection property="roles" ofType="liwen.zhao.common.jd.pojo.Role"><id column="roleid" property="id"/><result column="ppid" property="parent_id"/><result column="role_name" property="role_name"/><result column="gen_time" property="gen_time"/><result column="description" property="description"/><collection property="rightList" ofType="liwen.zhao.common.jd.pojo.Right"><id column="riid" property="id"/><result column="right_name" property="right_name"/><result column="right_type" property="right_type"/></collection></collection></resultMap><select id="findCommonUserByNameAndPswAndAction" resultMap="cus">SELECT *,tsb_common_user_role_relation.id AS currid,tsb_role_right_relation.id AS rrrid,tsb_right.id AS riid,tsb_role.id as roleid,tsb_role.parent_id as ppid FROM tsb_common_userRIGHT JOIN tsb_common_user_role_relation ON tsb_common_user.id=tsb_common_user_role_relation.uidLEFT JOIN tsb_role ON tsb_role.id=tsb_common_user_role_relation.ridLEFT JOIN tsb_role_right_relation ON tsb_role_right_relation.role_id=tsb_common_user_role_relation.ridLEFT JOIN tsb_right ON tsb_right.id=tsb_role_right_relation.right_id<where><if test="userName !=null">tsb_common_user.userName=#{userName}</if><if test="action !=null">and right_name=#{action}</if><if test="psw !=null">and psw=#{psw}</if></where></select>
</mapper>
前端JS实现
<script>function checkForm(){$("#sub").html("<i class=\"fas fa-1x fa-sync-alt fa-spin\"></i> Sign In");var userName=$("input[name='userName']").val();var psw=$("input[name='psw']").val();$.post("http://localhost/user/adminLogin",{"username":userName,"psw":psw,},function (result) {$("#sub").html("Sign In");if(result.status!=200){alert(result.msg);}else{$(window).attr('location','http://localhost/admin');}})return false;}
</script>
最终效果
密码错误提示:
无权访问提示:
用户名密码正确,并且有权访问,调转主页(注:暂未实现登录状态存储):
代码地址:https://gitee.com/zhaoliwen/JD_ALL.git
4.从零开始搭建基于SpringCloud的京东整站_用户微服务_后台登录鉴权相关推荐
- 3.从零开始搭建基于SpringCloud的京东整站_文件上传微服务
本次目标 本次实现的目标:实现图片上传微服务. 文件上传在很多项目和很多模块都要用到,所以将其单独作为一个微服务. 如下图蓝色箭头所示:FileUploadMicroservice 静态资源 本案例图 ...
- cloud自动发卡平台cloudfaka_open-cloud基于springcloud、oauth2、nacos打造的微服务开放平台...
简介 搭建基于OAuth2的开放平台.为APP端.应用服务提供统一接口管控平台.为第三方合作伙伴的业务对接提供授信可控的技术对接平台 分布式架构,统一配置中心,服务治理.fegin(RPC)内部调用, ...
- Spring Security OAuth2.0_实现分布式认证授权_微服务解析令牌并鉴权_Spring Security OAuth2.0认证授权---springcloud工作笔记154
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 然后我们接着去看,我们需要其他的微服务就解析令牌,并且进行根据权限判断能不能来访问我们的某个方法 ...
- 利用cloudflare works搭建个人网盘站——免费免服务器搭建基于onedrive的网盘站(2021版)
FODI是一款 OneDrive 秒级列表程序,之前就支持腾讯云SFC搭建基于onedrive的网盘站,但是现在腾讯云api要收费了(cloudflare的访问速度没有腾讯云的SFC快),所以其作者增 ...
- 利用cloudflare works搭建个人网盘站——免费免服务器搭建基于onedrive的网盘站(2020版)
FODI是一款 OneDrive 秒级列表程序,之前就支持腾讯云SFC搭建基于onedrive的网盘站,但是现在腾讯云api要收费了(cloudflare的访问速度没有腾讯云的SFC快),所以其作者增 ...
- 【学习日记2023.6.9】之 SpringCloud入门(认识微服务_服务拆分和远程调用RestTemplate_Eureka注册中心_Ribbon负载均衡_Nacos注册中心)
文章目录 SpringCloud 1. 认识微服务 1.1 单体架构 1.2 分布式架构 1.3 微服务 1.4 SpringCloud 1.5 总结 2. 服务拆分和远程调用 2.1 服务拆分原则 ...
- 史上最简单:SpringCloud 集成 mybatis-plus(以若依微服务版本为例)
编者按:若依微服务版是基于Spring Boot.Spring Cloud & Alibaba的微服务的权限管理系统,也是笔者比较推荐的个人学习和企业实践都比较优秀的开源项目. 笔者也以此项目 ...
- Java微服务_医疗管理项目_基于若依快速开发框架
一.项目简介 项目简介:尚医疗是专门为各大医院.门]诊提供的一款医疗管理平台.系统包含:系统 管理.药品进销存管理.看病就诊.收费管理.检查管理.数据统计等核心模块.通过尚医 疗系统可以快速方便的管理 ...
- SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务)
2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务) 一.大致介绍 微服务与微服务之间通过 ...
最新文章
- Python Day Eleven
- 【错误记录】IntelliJ IDEA 中 Java 代码中的中文注释报错 ( Menu / File / Settings / Editor / File Encodings 中修改工程编码 )
- linux下查看文件命令小结
- hdu-3342-Legal or Not--拓扑排序//两种解法
- AtCoder AGC030F Permutation and Minimum (DP、计数)
- Fiori 花瓣动画效果的实现原理
- 前端项目难点及解决方法_预埋件施工重点难点的解决方法
- A Concise and Provably Informative Multi-Scale Signature Based on Heat Diffusion
- Struts2中的ModelDriven机制及其运用、refreshModelBeforeResult属性解决的问题
- oracle mysql us7acsii_有关oracle数据库us7ascii字符集转换策略的探讨
- 明解java.pdf_明解C语言:中级篇 PDF下载
- java 毕向东 内部类_内部类--毕向东Java基础教程学习笔记
- 主要发达国家大数据政策比较研究
- 实训小笔记之—产品经理能力模型
- [渝粤教育] 西北农林科技大学 成本会计学 参考 资料
- 基于java奥利给共享自习室系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
- Proteus VSM Studio汇编 + 蜂鸣器播放谱曲八月桂花香
- 练习:银行复利计算(用 for 循环解一道初中小题)
- vb.net 教程 3-6 窗体编程 打印
- 《单片机原理及应用》——概述
热门文章
- echarts饼图的颜色修改
- Metastealer 接棒 Racoon stealer 进行窃密
- Python偏最小二乘回归(PLSR)测试
- java编码解码加密解密--md5、SHA-256、SHA-512、MAC、DES、AES、RSA
- adb.exe无法运行,提示0xc000007b错误
- 力不如我的同学,靠这份Java面试八股文,秋招拿到了60w+的offer
- FTP中MLST概要解读---解决获取ftpFile为null的另外一种方式
- Linux内核机制总结内存管理之每处理器内存分配器(十七)
- C语言实现基于翔云平台的人脸识别demo2(树莓派)
- HardFault_Handler的相关实验1--VCAP_1管脚外加信号源