当前位置:网站首页>Redis实现Single单点登入--系统框架搭建(一)
Redis实现Single单点登入--系统框架搭建(一)
2022-07-26 11:45:00 【用户9919783】
环境需求:redis3.8.2+maven+springBoot+jdk1.8+freemarker模板
1、需求背景
周末在家,上家同事突然联系,让我给他网站做单点登入功能,于是自己先梳理逻辑,实现功能并且记录下来。
单点登入(Single sign on)顾名思义,就是在一个网站登入之后,其他网站就不需要用户继续输入账号密码,而能免密登入,这种技术在大型网站都使用的非常频繁,比如阿里巴巴,当用户登入他们系统后,每个子系统都能自动登入,如果大家在登入某宝之后,登入某碑,也需要密码,登入淘宝也需要重新输入密码,这肯定会造成用户体验极差,而且系统的认证逻辑也会很麻烦,这时候单点登入就出现了。
2、代码实例
本文演示两个系统
@Slf4j
@RestController
@RequestMapping("/redis/single")
public class RedisSingleController {
private static final String NAME = "name";
private static final String PASSWORD = "password";
@Resource
private RedisTemplate redisTemplate;
@GetMapping("/login_page")
public ModelAndView loginPage(){
ModelAndView mv = new ModelAndView();
mv.setViewName("loginPage");
return mv;
}
/**
* 系统1
* @return
*/
@GetMapping("/system1")
public ModelAndView system1(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
if(redisTemplate.hasKey("name")){
mv.setViewName("systemOnePage");
return mv;
}
request.getSession().setAttribute("goUrl","indexSystem1");
mv.setViewName("loginPage");
return mv;
}
/**
* 系统2
* @return
*/
@GetMapping("/system2")
public ModelAndView system2(HttpServletRequest request){
ModelAndView mv = new ModelAndView();
if(redisTemplate.hasKey("name")){
mv.setViewName("systemTwoPage");
return mv;
}
request.getSession().setAttribute("goUrl","indexSystem2");
mv.setViewName("loginPage");
return mv;
}
/**
* 效验账号密码是否正常
* @param name
* @param password
* @return
*/
@PostMapping("/detection")
@ResponseBody
public Map<String, Object> index( String name, String password, String gotoUrl){
Map<String, Object> map = new HashMap<>();
if(!ObjectUtil.equals(name,NAME) || !ObjectUtil.equals(password,PASSWORD)){
map.put("flag",false);
map.put("data","账号密码不匹配!");
return map;
}
map.put("flag",true);
map.put("data","账号密码正确!");
//redis缓存20s失效
redisTemplate.opsForValue().set("name",name,10, TimeUnit.SECONDS);
return map;
}
/**
* 登入成功,系统一进入首页
* @return
*/
@GetMapping("/indexSystem1")
@ResponseBody
public ModelAndView index(){
ModelAndView mv = new ModelAndView();
mv.setViewName("systemOnePage");
return mv;
}
/**
* 登入成功,系统二进入首页
* @return
*/
@GetMapping("/indexSystem2")
@ResponseBody
public ModelAndView indexSystem2(){
ModelAndView mv = new ModelAndView();
mv.setViewName("systemTwoPage");
return mv;
}1、保证访问系统一登入页面时,进入的是系统一首页,访问系统二登入页面时,进入的是系统二首页。
2、在访问系统一或者系统二时,都需要判断redis里是否存在当前用户,存在则免密登入。
3、逻辑处理,在登入先判断数据库里的账号密码是否正确,若用户在页面登入正确,则返回登入成功,并且存入redis,给他设置过期时间。
4、保证在redis过期时间内其他子系统都能免密登入。
边栏推荐
- 零基础小白也能懂的 Redis 数据库,手把手教你易学易用!
- 向日葵资深产品总监技术分享:如何在AD域环境下应用
- 按位与怎么写SQL
- Fineos announced the open registration of grouptech connect activities in 2022
- Flink 在 讯飞 AI 营销业务的实时数据分析实践
- 【通信原理】第一章 -- 绪论
- 3.1 create menu and game page - up
- Data Lake (19): SQL API reads Kafka data and writes it to iceberg table in real time
- 以太网驱动详解之RMII、SMII、GMII、RGMII接口
- 国内11所“袖珍”大学!在校园跑步,还没加速就出校门了...
猜你喜欢

【安徽大学】考研初试复试资料分享

Talking about web vitals

Is it easy to find a job after programmer training?

Pytorch——基于mmseg/mmdet训练报错:RuntimeError: Expected to have finished reduction in the prior iteration

网络协议:TCP/IP协议

零基础小白也能懂的 Redis 数据库,手把手教你易学易用!

Miccai2022 paper | evolutionary multi-objective architecture search framework: application in covid-19 3D CT classification

Flink 在 讯飞 AI 营销业务的实时数据分析实践

Application scheme of ankerui residual pressure monitoring system in residential quarter

音视频技术开发周刊 | 255
随机推荐
V00 - 年纪大了,想做啥就做啥吧
Live broadcast preview at 19:30 on July 27: harmonyos3 and Huawei's full scene new product launch
【附下载】一款强大的Web自动化漏洞扫描工具——Xray
零基础小白也能懂的 Redis 数据库,手把手教你易学易用!
音视频+
【通信原理】第三章 -- 随机过程[上]
系统调用捕获和分—Ring3层LD_PRELOAD机制进行库函数劫持
Sunflower senior product director technology sharing: how to apply in AD domain environment
Talking about web vitals
Test cases should never be used casually, recording the thinking caused by the exception of a test case
The latest heart-shaped puzzle applet source code + with flow master
滴滴被罚80亿!拿用户数据赚钱的时代结束了
建模杂谈系列150 SCLC工程化实验3-SRule
System call capture and segmentation - RING3 layer LD_ Preload mechanism for library function hijacking
【安徽大学】考研初试复试资料分享
Recalling Sister Feng
浅谈低代码技术在物流运输平台中的搭建与管理
专访即构科技李凯:音视频的有趣、行业前沿一直吸引着我
10 个 Reduce 常用“奇技淫巧”
C language code quantity statistical tool