dihin

2006年6月25日 #

cas实现sso注意的2个问题

弄了一下午的cas安装终于成功了,,现在将步骤叙述一下
下载
        
cas-server-3.0.4.zip              
http://www.ja-sig.org/downloads/cas/cas-server-3.0.4.zip


cas-client-2.0.11.zip  http://www.ja-sig.org/downloads/cas-clients/cas-client-2.0.11.zip

环境为 winxp  tomcat5.5.17  jdk1.5.0_05
1. 生成服务端证书
keytool -genkey -alias casserver -keyalg RSA -keystore tomcat.jks
CN:localhost
其他的随便  
这里要注意姓名必须是服务器的域名 由于我是在本机所以是localhost
如果不这样写就会报如下异常:
java.io.IOException: HTTPS hostname wrong:  should be <localhost>

这个异常出现在创建证书的第一个问题 姓名。其实这个“姓名”应该是域名。比如说localhost或是blogjava.net之类的。输成了姓名,和真正运行的时候域名不符,就会出错。浏览器无所谓,弹出一个对话框,用户按一下就行了。但http client就直接抛出了异常。--google出来的

2. 导出证书
keytool -export -file cas.cer -alias tomcat -keystore tomcat.jks

3.把导出的证书导入到jre/lib/security的cacerts中
这里又有一点要注意的   可能由于我的jre在线升级过一次 现在的工作的jre目录在C:\Program Files\Java\jre1.5.0_06\ 所以要把证书导入到C:\Program Files\Java\jre1.5.0_06\lib\security的cacerts中去
我一开始就是因为 导入到了%JAVA_HOME%的jre中 结果弄了半天都不成功报异常如下:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

4.配置tomcat使用ssl
<Connector port="8443" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               clientAuth="false"//单向SSL
               keystoreFile="C:\tomcat.jks" //我生成的keystore存放在c盘
               sslProtocol="TLS" />

5.
部署CAS应用
 
解压 cas-server-3.0.4.zip, 提取 \target\cas.war 文件,将 cas.war 文件复制到 TOMCAT 的安装路径 webapps 下,启动 TOMCAT ,检查 CAS
应用是否正常启动。

6.客户端配置
下载cas-client-2.0.11.zip

java/lib/casclient.jar考到 你所发布的webapp的WEB-INF/lib下
修改WEB-INF/web.xml 在里面添加过滤器
    <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://localhost:8443/cas/login</param-value>
        </init-param>
        <init-param>
           <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
           <param-value>https://localhost:8443/cas/proxyValidate</param-value>
        </init-param>
        <init-param>
          <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
          <param-value>localhost:8443</param-value>
        </init-param>
    </filter>
   
    <filter-mapping>
        <filter-name>CASFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

把里面的localhost换成域名
8443换成你所使用的端口

接着连接 https://localhost:8443/app1    //app1是你要实现sso的web应用
接着页面就会跳转到cas的登陆页面 就像你在第5步看到的页面一样
随便用一个用户名登陆 只要 用户名和密码一样就可以登陆
可以在app2上重复步骤6 这样只要在app1上登陆后 再连接app2的url就不用再次登陆了
这就是单点登陆了。

 其实是一个很简单的事情 但是过程中要注意 步骤1和3

 

 

 

 


posted @ 2006-07-24 17:50 狒狒 阅读(4199) | 评论 (3)编辑 收藏

hibernate操作mysql的blob数据

package hibernate;

import java.sql.Blob;

public class Blobtest  implements java.io.Serializable {

     
private long id;
     
private Blob image;

    
public Blobtest() {
    }


    
public Blobtest(Blob image) {
        
this.image = image;
    }


    
public long getId() {
        
return this.id;
    }

    
    
public void setId(long id) {
        
this.id = id;
    }


    
public Blob getImage() {
        
return this.image;
    }

    
    
public void setImage(Blob image) {
        
this.image = image;
    }

}
 测试写入数据:
package hibernate;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;

public class Test {
    
public static void main(String[] args) throws IOException {
        InputStream in 
= new FileInputStream("F:/lzx.jpg");        
        
byte[] b = new byte[in.available()];
        in.read(b);
        in.close();
        Blobtest blobTest
=new Blobtest();

        blobTest.setImage(Hibernate.createBlob(b));
        Session session
=HibernateUtil.currentSession();
        Transaction tx
=session.beginTransaction(); 
        session.save(blobTest); 
        tx.commit(); 
        System.out.print(
"success"); 
        HibernateUtil.closeSession();
    }

}

读出数据:
package hibernate;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.SQLException;

import org.hibernate.Session;
import org.hibernate.Transaction;

public class TestWrite {
    
public static void main(String[] args) throws IOException, SQLException {
        Session session
=HibernateUtil.currentSession();
        Transaction tx
=session.beginTransaction();
        Blobtest blobTest 
= new Blobtest();
        blobTest 
= (Blobtest) session.get(Blobtest.classnew Long(1));
        System.out.println(
"qu chu shu ju");
        OutputStream out 
= new FileOutputStream("F:/111.jpg");
        out.write(blobTest.getImage().getBytes(
1,(int) blobTest.getImage().length()));
        out.flush();
        out.close();
        HibernateUtil.closeSession();
    }

}

posted @ 2006-06-25 02:00 狒狒 阅读(3200) | 评论 (1)编辑 收藏

My Links

Blog Stats

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜