java实现单点登录_JAVA实现SSO单点登录

java实现单点登录_JAVA实现SSO单点登录一 概述 1 1 SSO 介绍 SSO 全称 SingleSignOn 几个相互信任的应用之间 在其中一个应用进行登录以后 其他信任的应用直接免登 例如 新浪下的博客和微博 在网页上同时打开后都没登录 当登录了其中一个之后 再刷新另一个会自动登录 1 2 SSO 核心技术分析通过 cookie 验证用户的身份 配置拦截器拦截所有请求 当访问站点时 拦截方法中判断客户端是否存在指定 cookie 以及是否有效 满足条

一、概述

1.1、SSO介绍

SSO全称:SingleSignOn,几个相互信任的应用之间,在其中一个应用进行登录以后,其他信任的应用直接免登。

例如:新浪下的博客和微博。在网页上同时打开后都没登录,当登录了其中一个之后,再刷新另一个会自动登录。

1.2、SSO核心技术分析

通过cookie验证用户的身份,配置拦截器拦截所有请求,当访问站点时,拦截方法中判断客户端是否存在指定cookie以及是否有效,满足条件则跳主页面,否则跳登录页面。当登录并验证成功后定义cookie并写入客户端。

6bb7805ab7963ef379c7dd646fb75364.png

二、同域SSO

2.1、同域SSO准备工作

本案例基于Spring+Struts2开发,具体的框架搭建本处不在赘述,需要的可自行百度

2.2、编写统一登录接口

1、统一登录页面,除了用户名和密码,需要在页面隐藏一个gotourl,用来记录验证通过后需要跳转的地址

请登录

用户名:

密码:

2、输入用户名、密码后请求后台的dologin方法,如果用户名密码验证通过,把信息存入cookie的顶层目录下。

publicString dologin(){

//同域下的sso

booleanok = SSOCheck.checklogin(username, password);

if(ok){

Cookie cookie = newCookie(“ssocookie”, “sso”);

cookie.setPath(“/”);//设置到顶层

HttpServletResponse response = ServletActionContext.getResponse();

response.addCookie(cookie);

returnSUCCESS;

}

return”login”;

}

2.3、编写登陆校验接口

系统拿到统一登录页面传过来的cookie进行验证,验证通过则跳过本系统的登陆直接进入系统

public static booleancheckcookie(HttpServletRequest request){

Cookie[] cookies = request.getCookies();

if(cookies!=null){

for(Cookie cookie:cookies){

if(cookie.getName().equals(“ssocookie”)&& cookie.getValue().equals(“sso”)){

return true;

}

}

}

return false;

}

2.4、编写DEMO1和DEMO2的主页

先访问demo1或者demo2的主页,验证如果cookie不存在,则跳转到登录页面

//先校验cookie的有效性 在校验登录

public classDemo1Action extendsActionSupport{

privateString gotourl;

publicString main(){

HttpServletRequest request = ServletActionContext.getRequest();

booleanok = SSOCheck.checkcookie(request);

if(ok){

returnSUCCESS;

}

gotourl= “/demo1/main.action”;

return”login”;

}

publicString getGotourl() {

returngotourl;

}

public voidsetGotourl(String gotourl) {

this.gotourl= gotourl;

}

}

三、同父域sso

demo1.x.com/demo1/main.action

demo2.x.com/demo2/main.action

统一校验接口:

check.x.com/sso/checkCookie.action

3.1、编写统一的登录接口

大部分逻辑跟同域sso类似,区别在于cookie的共享问题

cookie.setDomain(“.x.com”);//设置父域

cookie.setPath(“/”);//设置顶层

3.2、编写登陆校验接口

2a482365fbffe757998895fe1bc5391d.png

3.3、编写DEMO1和DEMO2主页

f6caa119be5dcdb4c208725984587881.png

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/223731.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午1:32
下一篇 2026年3月17日 下午1:33


相关推荐

  • IAP支付初识

    IAP支付初识IAP 全称 In AppPurchase 也可以叫内购 查看百度百科 IAP 是一种智能移动终端应用程序的付费模式 大概的意思 用户在 APP 内通过付费 来享受 APP 内提供的服务或体验 我不仅仅想总结一下苹果的 IAP 还想反思一下支付要注意的细节 从问题入手 如何确认苹果交易的唯一标识 想要做到支付的幂等性 每一笔订单都应该有一个唯一的标识 来避免出现类似这样的现象 用户支付了一次 服务端

    2026年3月18日
    2
  • DSP 第三章

    DSP 第三章变换作为一种工具来分析信号和 LTI 系统 Z 变换是处理离散信号的 拉普拉斯是处理连续信号的 Z 域就是 Z 的复平面 Z 变换只是一种信号的表达形式 某个时间序列和 X z 以及收敛域相对应 表 3 1 就是对前面的完全总结 有限时间的因果 反因果 和双边信号 对应收敛域 除掉 0 除掉正无穷 除掉 0 和正无穷 无限时间的因果 反因果 和双边信号 对应收敛域 圈外 圈内 环 单边的 Z 变

    2026年3月26日
    2
  • 一个卡片式的ViewPager,带你玩转ViewPager的PageTransformer属性!

    一个卡片式的ViewPager,带你玩转ViewPager的PageTransformer属性!我知道你会用ViewPager,可你在ViewPager中用过Android5.0新控件CardView么?你用过PageTransformer属性吗?搞懂这几个,让你的ViewPager大放异彩!

    2022年7月22日
    14
  • 人物关系图谱插件

    人物关系图谱插件<template><div><divstyle=”height:calc(100vh-50px);”><RelationGraphref=”seeksRelationGraph”:options=”graphOptions”:on-node-click=”onNodeClick”:on-line-click=”onLineClick”/></div>…

    2022年6月26日
    54
  • 搭建jenkins实现自动化部署微服务_自动化部署平台搭建

    搭建jenkins实现自动化部署微服务_自动化部署平台搭建一、安装jenkins1、添加yumrepos,然后安装注:如果上边的执行成功就不用再执行这两行了注:如果网络不好需要重试几次2、如果未安装java还需安装java3、启动和停止如果启动

    2022年8月1日
    3
  • CC2530之OLED12864程序详解

    CC2530之OLED12864程序详解暂时先贴上程序 我再整理整理 include code tab h defineLCD SCLP0 4 串行时钟输入 defineLCD SDAP0 5 串行数据输入 defineLCD RSTP0 6 复位输入端 defineLCD DCP0 7 数据 命令控制 defineXLevel

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号