1.使用cookie简单实现单点登录流程
- 实现了简单使用多系统,单一位置同时登陆,以及注销
- 主要认证中心流程代码编写在为在sso-login包下的ViewConreoller和LoginController;各系统的用户名显示是写在各自的ViewController中
- 在ViewController类中的toLogin方法
@Controller
@RequestMapping("/view)
public class ViewControler{
@RequestMapping("/login")
public String toLogin(@RequestParam(requires=false, default=")String target, HttpSession session,
@CookieValue(required=false, value="TOKEN") Cookie cookie){
if(StringUtils.isEmpty(target)){
target = "htttp://www.codeshop.com:8092/view/login";
}
if(cookie != null){
String token = cookie.getValue();
User user = LoginCacheUtil.loginUser.get(token);
if(user != null){
return "redirext:"+target;
}
}
session.setAttribute("target",target);
return "login";
}
}
- 在LoginController类中的doLogin方法用于实现用户登录,getUserInfo方法获取用户信息,保存在session中,logout方法注销用户
@Controller
@RequestMapping("/login")
public class LoginController {
private static Set<User>dbUsers;
static{ dbUsers = new HashSet<>();
dbUsers.add(new User(0."ku","123456"));
dbUsers.add(new User(1,"yan","654321")); }
@PostMapping public String doLogin(User user, HttpSession session, HttpServletResponse response){
String target = (String)session.getAtttribute("target");
Optional<User>first = dbUsers.stream().filter( dbUser - >dbUser.getUsername().equals(user.getUsername() &&
dbUser.getPassword().equals(user.geyPassword())).findFirst();
if(first.isPresent()){
String token = UUID.randomUUID().toString();
LoginUtil.loginUser.put(token,first.get());
Cookie cookie = new Cookie("TOKEN",token);
cookie.setDomain("codeshop.com");
response.addCookie(cookie);
}else{
session.setAttribute("msg","用户名或密码错误");
return "loign"; } return "redirect:"+target;
}
@GetMaping("info")
public ResponseEntity<User>getUserInfo(String token){
if(!StingUtils.isEmpty(token)){
User user = LoginCacheUtil.loginUser.get(token);
return ResopnseEntity.ok(user);
}else{
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
}
@GetMappping("/logout")
public String logOut(@CookieValue(required=false,value="TOKEN") Cookie cookkie, HttpServletResponse response, String target){
cookie.setMaxAge(0);
LoginCacheUtil.loginUser.remove(cookie.getValue());
response.addCookie(cookie);
return "redirect"+target;
}
}
- 在sso-cart、sso-main、sso-vip包下的ViewController的toIndex方法用于实现用户信息登录、显示用户信息,注销用户信息
@Controller
@RequestMapping("/view")
public class ViewController{
@AutoWired RestTemplate restTemplate;
private final String USER_INFO_ADDRESS="http://login.codeshop.com:8090/login/info?token=";
@RequestMapping("/login")
public String toLogin(@){
if(cookie != null){
String token = cookie.getValue();
if(token != null){
Map result = restTemplate.getForObject(USER_INFPO_ADDRESS,Map.class);
session.setAttribute("loginUser",result);
}
}
}
}
- 总结:大体实现了使用cookie完成单点登录,学到咯整体是如何实现的,流程是怎么样的,doLogin中将token作为键,用户信息坐位置存储在缓存类中(可以考虑使用Redis实现),再将token以“TOKEN”方式存在cookie;getUserInfo是判断token是否存在,再通过ResponseEntity形式返回状态;logOut方法主要通过删除cookie,以及缓存类中cookie,响应给浏览器实现注销
- ViewController中,判断cookie是否存在,token是否存在,login中通过token判断用户是否存在,返回登录页面 ,而其他系统是根据token以getForObject方法以JSON形式返回用户信息到页面
- 反思:自己敲了几遍,但是还是没法记住每个类的功能和具体的作用,需要反复理解,敲打,复盘
- 这次单点登录功能用到了前端的一些<form action="" method="">表单,以及<input name="username"/>标签,还有@RequestMapping,根据请求访问注解下的方法,404错误是请求路径与实际路径不配问题
1.使用cookie简单实现单点登录流程的更多相关文章
- SSO 基于Cookie+fliter实现单点登录 实例解析(一)
接上文,SSO的理论讲解,接下来实践实践! 1.使用Cookie解决单点登录 技术点: 1.设置Cookie的路径为setPath("/").即Tomcat的目录下都有效 2.设置 ...
- java实现简单的单点登录
java实现简单的单点登录 摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现 ...
- CAS学习笔记二:CAS单点登录流程
背景 由于公司项目甲方众多,各甲方为了统一登录用户体系实现单点登录(SSO)开始要求各乙方项目对接其搭建的CAS单点登录服务,有段时间对CAS的流程很迷,各厂商还有基于CAS进行二次开发的情况,所以对 ...
- 搭建CAS服务器,并实现一个简单的单点登录的demo
官网:http://jasig.github.io/cas/Cas Server下载:http://developer.jasig.org/cas/Cas Client下载:http://develo ...
- SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析
最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程 涉及的关键知识点: 1.jquery ajax跨 ...
- PHP简单实现单点登录功能示例
1.准备两个虚拟域名 127.0.0.1 www.openpoor.com127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 1 ...
- 单点登录(二)使用Cookie+File实现单点登录登出(附源代码)
上一篇文章<单点登录(一)使用Cookie+File实现单点登录>中,我们实现了单点登录的功能. 本文作为上一篇文章的扩展部分,加入"单点登出"功能. 源代码下载:链接 ...
- SSO 基于Cookie+fliter实现单点登录(SSO):工作原理
SSO的概念: 单点登录SSO(Single Sign-On)是身份管理中的一部分. SSO的一种较为通俗的定义是:SSO是指訪问同一server不同应用中的受保护资源的同一用户,仅仅须要登录一次,即 ...
- 【SSO】一个简单的单点登录演示实现
业务系统的管理后台往往数量众多,且各自需要一套用户名密码来进行登录,不方便使用.因此花了点时间研究如何实现一套单点登录系统. 众所周知,SSO系统设计中,往往需要想办法解决cookie不能跨域的问题, ...
- 点单登录原理和java实现简单的单点登录
引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...
随机推荐
- 模拟法NOIP题单
模拟算法的试题训练, 重点针对试题分析环节的练习锻炼!! 考察阅读能力.分析能力.建模能力! 模拟法题目是最基础的题目,她不难,她复杂,她的实现往往需要足够的细心耐心! 练习这类题目能够使你掌握其他算 ...
- Java中接口相关知识
1.接口 1.1接口概述 接口就是一种公共的规范标准,只要符合标准,大家都可以通用 Java中的接口更多的体现在对行为的抽象 1.2接口的特点 接口用关键字interface修饰,格式:public ...
- nuxtjs项目空白路由强跳到首页
1.根目录下新建middleware文件夹并新建文件unknownRoute.js,代码如下 /** * 未知路由重定向 到首页 */ export default ({store, route, r ...
- IT工具知识-14:如何通过adb操作安卓剪切板?
1.安装apk 下载地址 2.运行服务(每次重启系统都需要运行一次) adb shell am startservice ca.zgrs.clipper/.ClipboardService 3.设置剪 ...
- CSS选择艺术以及CSS文本样式
CSS选择的艺术1.css规则由两部分构成:选择器,声明(声明由属性和值构成且末尾跟一个分号)2.css注释:/*--*/3.CSS样式的引用(1)行内样式(内联样式)例如:<p style=& ...
- pretty break
scale_x_continuous( breaks = pretty_breaks(10),labels=scales::comma)+ x <- 1:4 y <- c(0, 0.000 ...
- mysqld_safe Directory '/tmp/mysql' for UNIX socket file don't exists.
报错版本:mysql-5.7.35 1.报错完整提示信息: [root@localhost bin]# 2022-11-15T04:04:43.122905Z mysqld_safe Logging ...
- js屏蔽开发者工具
一.屏蔽浏览器右键菜单审查元素 document.oncontextmenu = function () { return false; }; 二.屏蔽F12以及ctrl+shift+i 打开调试工具 ...
- [Lua]敏感字检测
参考链接: https://zhuanlan.zhihu.com/p/84685657 https://www.cnblogs.com/luguoshuai/p/9254190.html 一开始打算使 ...
- 程序猿、IT男、屌丝
一个学计算机的,做了金融圈的朋友,对另外做硬件的朋友,如是说: [据说你写的程序代码,必须很浪的计算机才能运行] [ 以后还用写程序吗.不是ChatGPT直接可以出源代码吗?] 程序猿.IT男.屌丝. ...