portal之SSO开发文档

前两天看到别人写的,感觉不错,就转了过来做为参考

 

   为了满足portal门户与各个子系统统一登录的需求,从而使用CAS进行SSO单点登录的配置开发。

 

 开发资源

开发中所使用的资源版本如下说明,不同的版本所使用的配置方法及开发步骤不同,请注意相应的版本号

Liferay portal 4.3.0

http://www.liferay.com/

liferay-portal-cas-web-4.3.0.war

http://www.liferay.com/

cas-server-3.0.5.zip

http://www.ja-sig.org/products/cas/

cas-client-java-2.1.1.zip

http://www.ja-sig.org/products/cas/

环境要求

JDK 1.4.2

Websphere6.0.2.15

  开发使用Liferay portal 4.3.0门户平台框架,测试环境使用liferay绑定的tomacat5.X+JDK1.4,可以从http://www.liferay.com/官网上下载其绑定的相关版本进行整合开发。

  单点登陆服务端使用liferay整合后的liferay-portal-cas-web-4.3.0.war进行配置,其集成使用的CAS版本为cas-server-3.0.5.jar客户端使用CAS Client2.11;相关资料文档可查看http://www.ja-sig.org/products/cas/相关文档。

 

CAS-SERVER

    CAS是Yale大学的ITS开发的一套JAVA实现的开源的SSO的服务。该服务是以一个java web app(eg:cas.war)来进行服务的,使用时需要将cas.war发布到一个servlet2.3兼容的服务器上,并且服务器需要支持SSL,在需要使用该服务的其他服务器(客户),配置相应的以fitle实现SSO。

  在liferay portal项目中,使用自已集成的liferay-portal-cas-web-4.3.0.war也可在cas的官方站点中下载相应原码cas-server-3.0.5.zip进行修改!

  

 CAS WEB应用  

  在lifreay项目中下载liferay-portal-cas-web-4.3.0.war,里面集成了SSO单点登录的开发方法。

将项目导入eclipse进行二次开发

使用liferay portal进行CAS Server配置,其配置方法在liferay官方文档中有详细的说明:

http://content.liferay.com/4.3/doc/installation/liferay_4_installation_guide/multipage/ch05s04.html

1、下载Liferay-portal-cas-4.3.x.war;下载地址 www.liferay/web/guest/downloads

2、并将下载的war更名为cas.war,发布至tomcat下,进行相关设置。具体的发布方法需进行数字签名和tomcat环境配置工作

 

页面改造

Ø CAS汉化改造:

在src下使用eclipseproperties插件翻译messages.properties,如:

screen.welcome.welcome=欢迎您进入PORTAL平台 

Ø CAS页面改造:

对基本的登录登出页面及布局进行改造,以适合信息平台的需要,具体的改造页面主要包括:

"cas"WEB-INF"view"jsp"default"ui"casLoginView.jsp —登录页面

"cas"WEB-INF"view"jsp"default"ui"casLogoutView.jsp —登出页面

"cas"WEB-INF"view"jsp"default"ui"casLogoutView.jsp —登出页面

"cas"WEB-INF"view"jsp"default"ui"casGenericSuccess.jsp —录成功页面

"cas"WEB-INF"view"jsp"default"ui"includes"top.jsp —包含的头文件

"cas"WEB-INF"view"jsp"default"ui"includes"bottom.jsp —包含的头脚文件

 

授权改造

CAS跟普通的Web系统融合认证和授权,需增加java授权文件,此文件继承AbstractUsernamePasswordAuthenticationHandler ,并进行验证。

1、在src下增加DBHandlers.java

DBHandlers

package com.yitong.cas.auth.provider;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.Statement;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.sql.DataSource;

import org.apache.log4j.Logger;

import org.jasig.cas.authentication.handler.support.AbstractUsernamePasswordAuthenticationHandler;

import org.jasig.cas.authentication.principal.UsernamePasswordCredentials;

/**  

 * @author soju  

 * @version 1.0  

 *  

 */

public final class DBHandlers extends

  AbstractUsernamePasswordAuthenticationHandler {

 private Logger log = Logger.getLogger(DBHandlers.class);

 /**  

  * 相关的数据库配置DS对应的jndi  

  */

 private String _jndi = "lportal";

 public boolean authenticateUsernamePasswordInternal(

   final UsernamePasswordCredentials credentials) {

  String username = credentials.getUsername();

  String password = credentials.getPassword();

  log.info("username:" + username);

  log.info("password:" + password);

  try {

         password = Security.encryptMD5(password);   

   log.debug("md5password" + password);

  } catch (Exception e) {

   log.warn("MD5加密出错", e);

   throw new Exception("MD5加密出错");   

   return false;

  }

  try {

   if (checkuser(username, password) == 1) {

    getLog().info("认证成功!");

    return true;

   }

  } catch (Exception e) {

   log.warn("failed authentication", e);

  }

  return false;

 }

 private int checkuser(String user, String pwd) throws Exception {

  int ok= 0;

  Context initCtx = new InitialContext();

  DataSource ds = (DataSource) initCtx.lookup(_jndi);

  Connection conn = ds.getConnection();

  String sql = "select * from user_ where screenname='"+ user + "' and password_='" + pwd + "' ";

  log.info("sql= " + sql);

  Statement st = conn.createStatement();

  ResultSet rs = st.executeQuery(sql);

  log.info("登录成功!");

  if (rs.next()) {

   Ok=1;

  } else {

   log.info("帐号不存在或密码错误!");

  }

  conn.close();

  return rei;

 }

 protected void afterPropertiesSetInternal() throws Exception {

  super.afterPropertiesSetInternal(); 

 }

}

 

 

CAS-CLIENT

配置要求

  CAS 的客户端可以有很多种,因为验证的结果是以XML的格式返回的,故可以根据

需要实现一个自己的客户端。

http://www.yale.edu/tp/cas/cas-client-2.0.11.zip

http://www.ja-sig.org/products/cas/client/index.html

开发所需配置包,注意版本问题,会因版本开发的client不同

包名

说明

spring-mock.jar

jwebunit-1.3.zip

httpunit-1.6.2.zip

junit-4.4.zip

 代码配置

1、修改代码SecureURL.java,因数字签名只能使用只能是域名,而不能是IP之类的代替,故修改如下代码

edu.yale.its.tp.cas.util

//URLConnection uc = u.openConnection();

 /**

  * @sojust

  * 由于hostname 只能是域名,而不能是IP之类的 屏蔽掉对hostname的校验 

  * http://forum.java.sun.com/thread.jspa?threadID=521779 

  * begin

  */

     HostnameVerifier hv = new HostnameVerifier() {

     public boolean verify(String urlHostName, SSLSession session) {

     System.out.println("Warning: URL Host: "+urlHostName+" vs."+session.getPeerHost());

      return true;

       }

      };

  HttpsURLConnection.setDefaultHostnameVerifier(hv);

  HttpsURLConnection uc= (javax.net.ssl.HttpsURLConnection)u.openConnection(); 

            //end

2、修改Build.xml,将代码打包发布

 <target name="deploy">

  <mkdir dir="build"/>

  <mkdir dir="build/META-INF"/>

  <javac srcdir="src"

   destdir="build" 

   deprecation="false"

   classpathref="project.classpath"

  />  

  <copy todir="build/META-INF">

   <fileset dir="conf">

    <include name="*"/>

   </fileset>

  </copy>

  <jar jarfile="lib/casclient.jar" basedir="build"/>

 </target>

<path id="project.classpath">

         <path refid="lib.classpath" />

     </path> 

    <path id="lib.classpath">

         <fileset dir="lib" includes="*.jar" />

     </path>

PORTAL平台接入

资源介绍

Liferay portal作为sso一个的客户端,使用Liferay-portal-cas-4.3.x.war进行配置比较简介,特别是4.0版本后的配置,其官网上有详细的说明介绍:

http://content.liferay.com/4.3/doc/installation/liferay_4_installation_guide/multipage/ch05s04.html

代码配置

修改portal-ext.properties ,如果系统中没有则创建一个portal-ext.properties ;打开portal-ext.properties并增加如下代码:

cas.auth.enabled=true

cas.login.url=https://server IP:port/cas/login

cas.logout.url=https://server IP:port/cas/logout

cas.service.url=http:// client IP:port/portal/c/portal/login

cas.validate.url=https:// server IP:port/cas/proxyValidate

配置完成后,测试client的portal,登录http:// client IP:port/portal/c/portal/login

(我的项目中增加/portal项目名称),系统会自动跳转至SSO登录界面,登录后会跳转回client的portal。登录成功!

其它系统接入

子系统配置

其它客户端子系统接入时需将提供的casclient.jar包烤入到应用"WEB-INF"lib ,并进行相关配置。

web.xml配置

在wab中加入CASFilter,设置跳转过滤!

<!-- CAS Filters -->

<filter>

<filter-name>CASFilter</filter-name>

         <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>

<init-param>             <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>

<param-value>https://server IP:port/cas/login</param-value>

</init-param>

<!--这里的server是服务端的IP-->

<init-param>

             <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>

<param-value>https://server IP:port/cas/proxyValidate</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值