精华内容
下载资源
问答
  • 1.如果两个网站域名一级域名相同,可以使用cookie和filter实现单点登录,因为网站有可能(具体看cookie设置)可以共享cookie。例如:www.bbs.aa.cnwww.news.aa.cn。第一个网站在登录后,把用户信息写到cookie中,...

    1.如果两个网站域名的一级域名相同,可以使用cookie和filter实现单点登录,因为网站有可能(具体看cookie的设置)可以共享cookie。例如:www.bbs.aa.cnwww.news.aa.cn。

    第一个网站在登录后,把用户信息写到cookie中,当访问第二个网站时,第二个网站先经过自己的filter,检查session,如果没有,查询cookie,取出用户信息,放在session中登录。

    public void doFilter(ServletRequest req, ServletResponse resp,

    FilterChain chain) throws IOException, ServletException {

    HttpServletRequest request = (HttpServletRequest) req;

    if(request.getSession().getAttribute("user")== null){

    Cookie[] cs = request.getCookies();

    if (cs != null && cs.length > 0) {

    for (Cookie c : cs) {

    String cName = c.getName();

    if (cName.equals("sso")) {

    String userName = c.getValue();

    request.getSession().setAttribute("user", userName);

    }

    }

    }

    }

    chain.doFilter(request, resp);

    }

    2.如果两个网站域名的一级域名不同,不可以使用cookie和filter实现单点登录,因为网站不可以共享cookie。例如:www.bbs.cnwww.news.cn。

    使用cas框架服务实现单点登录。1.部署cas服务端。2.在服务器端的ticketGrantingTicketCookieGenerator.xml中修改文件。

    p:cookieSecure="false"//使用http协议

    p:cookieMaxAge="-1"//cookie有效时间

    p:cookieName="yjwname"//cookie名称

    p:cookiePath="/" />//项目名称

    3.部署www.bbs.cnwww.news.cn服务,在每个客户端项目中加入casjar包,在web.xml中配置<?xml version="1.0" encoding="UTF-8"?>

    mywebapp

    Simple sample, how to use CAS Java Client 3.x.

    In this sample exists a public area (/)

    and a private area (/protected/*).

    CAS Authentication Filter

    org.jasig.cas.client.authentication.AuthenticationFilter

    casServerLoginUrl

    http://www.service.com:8081/login

    serverName

    http://www.bbs.com:8081

    renew

    false

    gateway

    false

    CAS Validation Filter

    org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter

    casServerUrlPrefix

    http://www.service.com:8081

    serverName

    http://www.bbs.com:8081

    CAS HttpServletRequest Wrapper Filter

    org.jasig.cas.client.util.HttpServletRequestWrapperFilter

    CAS Assertion Thread Local Filter

    org.jasig.cas.client.util.AssertionThreadLocalFilter

    CAS Authentication Filter

    /protected/*

    CAS Validation Filter

    /*

    CAS HttpServletRequest Wrapper Filter

    /*

    CAS Assertion Thread Local Filter

    /*

    CAS Validation Filter

    /proxyCallback

    4.启动服务,这样就可以实现单点登录

    posted on 2016-06-05 11:17 杨军威 阅读(4932) 评论(0)  编辑  收藏

    展开全文
  • Java实现单点登录

    2020-12-16 23:31:01
    那么什么是单点登录呢?单点登录就是 两个不同web网站,同一个用户登录,在另一个网站就默认登录了(只需要登录一次) 下面是核心模块我们接触知识点 Cookie:用来存放登录信息 HttpServlet:在不同web...

    那么什么是单点登录呢?单点登录就是

    两个不同的web网站,同一个用户登录,在另一个网站就默认登录了(只需要登录一次)

    下面是核心模块我们接触的知识点

    • Cookie:用来存放登录信息
    • HttpServlet:在不同web应用之间通信
    • Thread: 通过多线程的方式异步调用,保持当前流程顺利进行

    实现流程


    创建目录

    将我们所需要的css,img,package目录等等创建好,并且倒入相应的jar包做准备

            

    光是导入创建了lib文件,导入jar包还不能起作用,还需要引入,打开 open module setting (Mac系统快捷键

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • Java实现单点登录(SSO)方式

    千次阅读 2019-07-23 13:27:51
    看到好文章分享一下,我就不多写了,都是简单易懂 博客地址1:https://www.cnblogs.com/libinhyq/p/9561582.html 博客地址2:https://blog.csdn.net/weixin_42686388/article/details/81299609 ...

    看到好的文章分享一下,我就不多写了,都是简单易懂的

    博客地址1:https://www.cnblogs.com/libinhyq/p/9561582.html
    博客地址2:https://blog.csdn.net/weixin_42686388/article/details/81299609

    展开全文
  • java代码import java.io.PrintWriter;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Properties;import lotus.domino.*;public class JavaAgent extends AgentBase {...

    java代码

    import java.io.PrintWriter;

    import java.util.Date;

    import java.util.HashMap;

    import java.util.Map;

    import java.util.Properties;

    import lotus.domino.*;

    public class JavaAgent extends AgentBase {

    public void NotesMain() {

    Session session = null;

    AgentContext agentContext = null;

    Document doc = null;

    PrintWriter pw = null;

    String token = "";

    String sReturn = "false";

    String sJson = "";

    try {

    pw = getAgentOutput();

    session = getSession();

    agentContext = session.getAgentContext();

    doc = agentContext.getDocumentContext();

    String sPara = doc.getItemValueString("query_string_decoded");

    // 单点usernameloginName

    String canonicalUser = sPara.substring(sPara.indexOf("sPara=")+6);

    // 单点起始时间

    Date tokenCreation = new Date(new Date().getTime() - 60000 * 10);

    String timeLimit="720";

    // 单点到期时间

    Date tokenExpires = new Date(tokenCreation.getTime() + Long.parseLong(timeLimit) * 60000);

    // domino SSO 密钥(domino SSO配置文档的LTPA_DominoSecret域值)

    String dominoSecret = "9BY2oinn1FmI42i3oNEnL3nNVPQ=";

    token = LtpaToken.generate(canonicalUser, tokenCreation, tokenExpires, dominoSecret).getLtpaToken();

    //System.out.println("token==ssobak==="+token);

    sReturn = "true";

    DominoTokenParser tokenParser = new DominoTokenParser();

    System.out.println("username:"+tokenParser.parse(token,dominoSecret));

    } catch(Exception e) {

    e.printStackTrace();

    }finally{

    pw.println("Content-type: text/plain;charset=GB2312");

    sJson = "{\"oResult\":\""+sReturn+"\",\"token\":\""+token+"\"}";

    System.out.println("sJson="+sJson);

    pw.println(sJson);

    //回收domino对象

    fnRecycle(doc);

    fnRecycle(agentContext);

    fnRecycle(session);

    if(pw!=null){

    pw.close();

    }

    }

    }

    public void fnRecycle(Base object){

    if(object != null){

    try {

    object.recycle();

    } catch (NotesException e) {

    // TODO 自己主动生成 catch 块

    e.printStackTrace();

    }

    }

    }

    }import java.security.MessageDigest;

    import java.security.NoSuchAlgorithmException;

    import java.util.Calendar;

    import java.util.Date;

    import java.util.Properties;

    /**

    * Lightweight Third Party Authentication. Generates and validates ltpa tokens used in Domino single sign on

    * environments. Does not work with WebSphere SSO tokens. You need a properties file named LtpaToken.properties which

    * holds two properties.

    *

    *

    * ) domino.secret=The base64 encoded secret found in the field LTPA_DominoSecret in the SSO configuration document.

    * ) cookie.domain=The domain you want generated cookies to be from. e.g. '.domain.com' (Note the leading dot)

    *

    *

    * @author $Author: rkelly $

    * @version $Revision: 1.1 $

    * @created $Date: 2003/04/07 18:22:14 $

    */

    public final class LtpaToken {

    private byte[] creation;

    private Date creationDate;

    private byte[] digest;

    private byte[] expires;

    private Date expiresDate;

    private byte[] hash;

    private byte[] header;

    private String ltpaToken;

    private Properties properties = null;

    private byte[] rawToken;

    private byte[] user;

    /**

    * Constructor for the LtpaToken object

    *

    * @param token

    * Description of the Parameter

    */

    public LtpaToken(String token) {

    init();

    ltpaToken = token;

    rawToken = Base64.decode(token);

    user = new byte[(rawToken.length) - 40];

    for (int i = 0; i < 4; i++) {

    header[i] = rawToken[i];

    }

    for (int i = 4; i < 12; i++) {

    creation[i - 4] = rawToken[i];

    }

    for (int i = 12; i < 20; i++) {

    expires[i - 12] = rawToken[i];

    }

    for (int i = 20; i < (rawToken.length - 20); i++) {

    user[i - 20] = rawToken[i];

    }

    for (int i = (rawToken.length - 20); i < rawToken.length; i++) {

    digest[i - (rawToken.length - 20)] = rawToken[i];

    }

    creationDate = new Date(Long.parseLong(new String(creation), 16) * 1000);

    expiresDate = new Date(Long.parseLong(new String(expires), 16) * 1000);

    }

    /**

    * Constructor for the LtpaToken object

    */

    private LtpaToken() {

    init();

    }

    /**

    * Gets the creationDate attribute of the LtpaToken object

    *

    * @return The creationDate value

    */

    public Date getCreationDate() {

    return creationDate;

    }

    /**

    * Gets the expiresDate attribute of the LtpaToken object

    *

    * @return The expiresDate value

    */

    public Date getExpiresDate() {

    return expiresDate;

    }

    /**

    * Gets the user attribute of the LtpaToken object

    *

    * @return The user value

    */

    public String getCanonicalUser() {

    return new String(user);

    }

    public String getUser(String prefix, String suffix) {

    String userName = new String(user);

    if (prefix !=null && !prefix.equals("")) {

    userName = userName.substring(userName.indexOf(prefix) + prefix.length());

    }

    if (suffix ==null || suffix.equals("")) {

    suffix = "/";

    }

    return userName.substring(0, userName.indexOf("/"));

    }

    public String getUser() {

    return new String(user);

    }

    /**

    * Validates the SHA-1 digest of the token with the Domino secret key.

    *

    * @return Returns true if valid.

    */

    public boolean isValid(LtpaTokenConfig config) {

    boolean validDigest = false;

    boolean validDateRange = false;

    byte[] newDigest;

    byte[] bytes = null;

    Date now = new Date();

    MessageDigest md = getDigest();

    bytes = concatenate(bytes, header);

    bytes = concatenate(bytes, creation);

    bytes = concatenate(bytes, expires);

    bytes = concatenate(bytes, user);

    bytes = concatenate(bytes, Base64.decode(config.getDominoSecret()));

    newDigest = md.digest(bytes);

    validDigest = MessageDigest.isEqual(digest, newDigest);

    validDateRange = now.after(creationDate) && now.before(expiresDate);

    return validDigest & validDateRange;

    }

    /**

    * String representation of LtpaToken object.

    *

    * @return Returns token String suitable for cookie value.

    */

    public String toString() {

    return ltpaToken;

    }

    /**

    * Creates a new SHA-1 MessageDigest instance.

    *

    * @return The instance.

    */

    private MessageDigest getDigest() {

    try {

    return MessageDigest.getInstance("SHA-1");

    } catch (NoSuchAlgorithmException nsae) {

    nsae.printStackTrace();

    }

    return null;

    }

    /**

    * Description of the Method

    */

    private void init() {

    creation = new byte[8];

    digest = new byte[20];

    expires = new byte[8];

    hash = new byte[20];

    header = new byte[4];

    }

    /**

    * Validates the SHA-1 digest of the token with the Domino secret key.

    *

    * @param ltpaToken

    * Description of the Parameter

    * @return The valid value

    */

    public static boolean isValid(String ltpaToken,LtpaTokenConfig config) {

    LtpaToken ltpa = new LtpaToken(ltpaToken);

    return ltpa.isValid(config);

    }

    /**

    * Generates a new LtpaToken with given parameters.

    *

    * @param canonicalUser

    * User name in canonical form. e.g. 'CN=Robert Kelly/OU=MIS/O=EBIMED'.

    * @param tokenCreation

    * Token creation date.

    * @param tokenExpires

    * Token expiration date.

    * @return The generated token.

    */

    public static LtpaToken generate(String canonicalUser, Date tokenCreation, Date tokenExpires,String secret) {

    LtpaToken ltpa = new LtpaToken();

    System.out.println("Generating token for " + canonicalUser);

    Calendar calendar = Calendar.getInstance();

    MessageDigest md = ltpa.getDigest();

    ltpa.header = new byte[] { 0, 1, 2, 3 };

    byte[] token = null;

    calendar.setTime(tokenCreation);

    ltpa.creation = Long.toHexString(calendar.getTimeInMillis() / 1000).toUpperCase().getBytes();

    calendar.setTime(tokenExpires);

    ltpa.expires = Long.toHexString(calendar.getTimeInMillis() / 1000).toUpperCase().getBytes();

    //try {

    //canonicalUser = new String(canonicalUser.getBytes(), "GB2312");

    //} catch (UnsupportedEncodingException e) {

    // TODO 自己主动生成 catch 块

    //e.printStackTrace();

    //}

    ltpa.user = canonicalUser.getBytes();

    //ltpa.user = canonicalUser.getBytes(Charset.forName("GB18030"));

    token = concatenate(token, ltpa.header);

    token = concatenate(token, ltpa.creation);

    token = concatenate(token, ltpa.expires);

    token = concatenate(token, ltpa.user);

    md.update(token);

    ltpa.digest = md.digest(Base64.decode(secret));

    token = concatenate(token, ltpa.digest);

    return new LtpaToken(new String(Base64.encodeBytes(token,Base64.DONT_BREAK_LINES)));

    }

    /**

    * Helper method to concatenate a byte array.

    *

    * @param a

    * Byte array a.

    * @param b

    * Byte array b.

    * @return a + b.

    */

    private static byte[] concatenate(byte[] a, byte[] b) {

    if (a == null) {

    return b;

    } else {

    byte[] bytes = new byte[a.length + b.length];

    System.arraycopy(a, 0, bytes, 0, a.length);

    System.arraycopy(b, 0, bytes, a.length, b.length);

    return bytes;

    }

    }

    public String getLtpaToken() {

    return ltpaToken;

    }

    public void setLtpaToken(String ltpaToken) {

    this.ltpaToken = ltpaToken;

    }

    }

    展开全文
  • java实现单点登录

    2014-06-20 15:31:05
    单点登录首先首先要保持数据库数据一致性,这个实现方式很多我就不多废话了。 刚开始我想法是在一个应用中登陆时候发送一个http请求到另一个应用保证两个应用同时拥有session,后来考虑到session过期不同步...
  • 基于java实现单点登录

    千次阅读 2019-01-29 17:23:08
      ...  缺点:首先,应用群域名得统一;其次,应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台...
  • 间接授权通过令牌实现,sso认证中心验证用户用户名密码没问题,创建授权令牌,在接下来跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式...
  • 通过本章内容你将学到单点登录系统和传统登录系统区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClient,整合Redis ,HttpClient简易教程。还在等什么?撸起袖子开始干吧!效果图:8081端口是sso系统...
  • 通过本章内容你将学到单点登录系统和传统登录系统区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClient,整合SolrJ ,HttpClient简易教程。还在等什么?撸起袖子开始干吧!效果图:8081端口是sso系统...
  • 文章针对多个应用系统的复杂登录问题,介绍了单点登录系统,并阐述了单点登录的几种模型分类,在此基础上重点介绍了基于Cookie机制的单点登录和基于SAML的单点登录。基于这两种实现方式,本文进行了单点登录系统设计...
  • java单点登录的实现

    千次阅读 2014-02-07 18:26:26
    单点登录首先首先要保持数据库数据一致性,这个实现方式很多我就不多废话了。 刚开始我想法是在一个应用中登陆时候发送一个http请求到另一个应用保证两个应用同时拥有session,后来考虑到session过期不同步...
  • java加token实现单点登录

    千次阅读 2019-05-30 17:53:54
    之前看过一些文章,直接说不清楚,因为我也是第一次研究单点登录,所有自己想写一篇希望能有所帮助 dome地址: 0.准备工作 1、tomcat8本地安装 2、maven3本地安装 3、使用maven发布项目到本地 1.简介 json...
  • Java Web 系统单点登录的实现

    千次阅读 2013-05-30 15:31:27
    在“CAS单点登录(SSO)服务器配置”这篇文章中我介绍了单点登录的概念和原理,以及单点登录服务器的配置方式。文章地址如下:http://hi.baidu.com/nanqiangma/blog/item/fc02dbd97f4d8df738012f2f.html  下面我们...
  • CAS代码和接入demo网上满天飞,也挺简单,不再赘述,这里仅理一下CAS原理和基础模式...实现SSO的方式有很多,现在主流的就是CAS这种基于session的单点登录形式。结构CAS分为两部分,CAS Server和CAS ClientCAS Serv...
  • java构建一个单点登录和安全验证系统,单点登录系统需要提供10万级别用户访问群承载,安全验证需提供各种可能验证模式,验证方式采用一种高级即可 安全验证同时需要提供一种比较好权限控制机制,以实例...
  • SSO单点登录Java实现实例

    千次阅读 2021-02-05 14:43:44
    本文主要讲解,基于令牌token方式实现,SpringBoot工程下SSO单点登录整合代码实例Demo,文末附源码地址。 1.环境准备 SSO认证中心服务( www.mysso.com) 客户端1(www.myclient1.com) 客户端2...
  • java实现单点登陆(SSO) 网络域名必须完全一致,才代表同一站点。 域名映射 :访问后面 会跳转到前面 单点登陆概念: 多系统,单一位置登录,实现多系统同时登陆。常出现在互联网和企业级平台中。 单点登陆一般是...
  • 摘要:本文主要介绍了利用webservice,session,cookie技术,来进行通用的单点登录系统分析与设计。具体实现语言为PHP。单点 登录,英文名为Single Sign On,简称为 SSO,是目前企业,网络业务用户综合处理重要...
  • 首先说明,同一个顶级域名的情况我不说什么,很简单,就一个Cookie的Domain属性。...那有人会说用SSO(单点登录)来做。SSO可能会有多种的实现方式,但是我们这里只介绍利用P3P来实现的方式。也就是如标题所...
  • Java识堂,一个高原创,高收藏,有干货微信公众号,一起成长,一起进步,欢迎关注单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户...
  • 许多都以 passport 的方式。   整个认证可以分三步完成   第一步:本地验证 这个很简单,输入本地的用户名和密码,然后服务器认证通过,并返回正确的Cookie;   第二步:做远程认证,并返回...
  • cas 单点登录 http 方式配置实现

    千次阅读 2019-04-02 14:00:48
    前言: 单点登录指的是在系统的集群中,登录其中一个子系统就可以无需再次登录访问其他的子系统或者主系统,目前比较流行的单点登录的解决方案就是使用 cas的方式 准备: 1.下载一个 cas-server-3.5.2-release.zip ...
  • 点击上方“Java基基”,选择“设为星标”做积极人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释开源项目RPC 框架 Dubbo 源码解析...
  • java单点登录

    2011-11-08 20:33:52
    跨服务器登录验证(单点登录SSO)的过程和Java实现 收藏 如果我们的网站需要和另一个域名做统一认证,也就是在我们网站登录,但真正的功能却在另一个网站来提供。许多都以 passport 的方式。 整个认证可以分三步...
  • 开发者(KaiFaX)面向全栈工程师开发者专注于前端、Java/Python/Go/PHP技术社区作者:张永恒来源:cnblogs.com/yonghengzh/p/13712729...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 268
精华内容 107
关键字:

java实现单点登录的方式

java 订阅