myjsoup的gravatar头像
myjsoup 2016-09-01 10:36:10

java Web开发完全跨域的SSO单点登录系统实例

单点登录的过程:认证系统根据用户在浏览器中输入的登录信息,进行身份认证,如果认证通过,返回给浏览器一个证明[认证系统_ticket];这时再通过浏览器将[认证系统_ticket]发送到到应用系统1的设置cookie的url,应用系统1返回给浏览器一个证明[应用系统1_ticket],这时再将请求重定向到最初访问的页面,以后应用系统1就可以自动登录了。现在用户访问了应用系统2,由于应用系统2没有生成过cookie(但是用户已经在应用系统1登录过一次了),将请求重定向到认证系统;认证系统检测到已经生成过[认证系统_ticket]了,认证通过;再通过浏览器将[认证系统_ticket]发送到到应用系统2的设置cookie的url,应用系统2返回给浏览器一个证明[应用系统2_ticket],这时再将请求重定向到最初访问的页面。应用系统3也同样原理,我们等于将ticket做了一次同步,保证了每个应用系统都有一份认证系统产生的ticket。剩余的ticket验证过程和上篇文章一样了。

域名准备

    修改hosts文件,映射3个域名:

  1. 127.0.0.1 web1.com  
  2. 127.0.0.1 web2.com  
  3. 127.0.0.1 passport.com 

需要修改下WebSSODemo/WEB-INF/web.xml文件。关键配置信息如下:

<filter>
    <filter-name>SSOAuth</filter-name>
    <filter-class>com.ghsau.filter.SSOAuth</filter-class>
    <init-param>
        <!-- 认证系统服务 -->
        <param-name>SSOService</param-name>
        <param-value>http://passport.com:8080/WebSSOAuth/SSOAuth</param-value>
    </init-param>
    <init-param>
        <!-- 认证系统ticket名称 -->
        <param-name>cookieName</param-name>
        <param-value>SSOID</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>SSOAuth</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>SSOAuth</filter-name>
    <url-pattern>/logout</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>SSOAuth</filter-name>
    <url-pattern>/setCookie</url-pattern>
</filter-mapping>

SSO使用

首先输入第一个应用系统的访问地址,http://web1.com:8080/WebSSODemo/index.jsp,如果是第一次访问的话,会自动跳转到登录页,如下图:

java Web开发完全跨域的SSO单点登录系统实例 系统中内置了3个用户,张三、李四、王五,用户名和密码皆为拼音全拼,输入zhangsan/zhangsan登录后,会自动跳转到我们刚才访问的页面,页面中显示了登录的用户名及欢迎信息,如下图:

java Web开发完全跨域的SSO单点登录系统实例 这时,我们再输入第二个应用系统的访问地址,http://web2.com:8080/WebSSODemo/index.jsp,我们发现,没有进行第二次登录,同样页面中显示了登录的用户名及欢迎信息,如下图:

java Web开发完全跨域的SSO单点登录系统实例

我们接着点击Logout注销用户,页面跳转到了登录页面,这时我们再回头访问第一个应用系统的页面,发现同样跳转到了登录页面。


打赏

文件名:sso.zip,文件大小:452.815K 下载
最代码最近下载分享源代码列表最近下载
wjh007  LV4 4月1日
zackery  LV9 1月27日
123xyz  LV2 2023年4月15日
ROCK森  LV12 2022年11月7日
49202046  LV7 2022年8月2日
wusiyin  LV14 2022年7月18日
a1677596408  LV23 2022年3月28日
jiaxiaoxinwork  LV1 2021年12月16日
荒唐的羊  LV27 2021年1月14日
15947813008  LV5 2020年11月16日
最代码最近浏览分享源代码列表最近浏览
wjh007  LV4 4月1日
asddwh  LV12 2023年12月26日
徐万强  LV9 2023年7月25日
123xyz  LV2 2023年4月10日
Muling  LV8 2023年2月6日
ROCK森  LV12 2022年11月7日
wjh12345654321  LV14 2022年9月14日
49202046  LV7 2022年8月2日
wusiyin  LV14 2022年7月18日
凉冰丶  LV7 2022年6月18日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友