﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Jacally</title><link>http://www.blogjava.net/jacally/</link><description>Java原生态</description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 20:01:42 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 20:01:42 GMT</pubDate><ttl>60</ttl><item><title>WebService开发笔记 3 -- 增加WebService访问的安全性</title><link>http://www.blogjava.net/jacally/archive/2008/03/19/187161.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Wed, 19 Mar 2008 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/archive/2008/03/19/187161.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/187161.html</wfw:comment><comments>http://www.blogjava.net/jacally/archive/2008/03/19/187161.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/187161.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/187161.html</trackback:ping><description><![CDATA[<br />
在<a href="http://www.blogjava.net/jacally/articles/186655.html">WebService开发笔记 1</a>中我们创建了一个WebService简单实例,下面我们通过一个简单的用户口令验证机制来加强一下WebService的安全性: <br />
<br />
1.修改WebService 服务端 spring 配置文件 ws-context.xml <br />
<pre class="xml" name="code">&lt;beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://cxf.apache.org/jaxws <br />
<a href="http://cxf.apache.org/schemas/jaxws.xsd">http://cxf.apache.org/schemas/jaxws.xsd</a> <br />
<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>  <br />
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName" default-lazy-init="true"&gt;
&lt;jaxws:endpoint id="webServiceSample"
address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"&gt;
&lt;jaxws:inInterceptors&gt;
&lt;bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /&gt;
&lt;bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"&gt;
&lt;constructor-arg&gt;
&lt;map&gt;
&lt;entry key="action" value="UsernameToken" /&gt;
&lt;entry key="passwordType" value="PasswordText" /&gt;
&lt;entry key="passwordCallbackClass" value="cn.org.coral.biz.examples.webservice.handler.WsAuthHandler" /&gt;
&lt;/map&gt;
&lt;/constructor-arg&gt;
&lt;/bean&gt;
&lt;/jaxws:inInterceptors&gt;
&lt;/jaxws:endpoint&gt;
&lt;/beans&gt;
</pre>
<br />
<br />
2.服务端添加passwordCallbackClass回调类,该类进行用户口令验证: <br />
<pre class="java" name="code">package cn.org.coral.biz.examples.webservice.handler;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;
public class WsAuthHandler  implements CallbackHandler{
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
if (pc.getIdentifer().equals("ws-client")){
if (!pc.getPassword().equals("admin")) {
throw new SecurityException("wrong password");
}
}else{
throw new SecurityException("wrong username");
}
}
}
</pre>
<br />
<br />
3.客户端修改spring 配置文件 wsclient-context.xml 如下: <br />
<pre class="xml" name="code">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://cxf.apache.org/jaxws <br />
<a href="http://cxf.apache.org/schemas/jaxws.xsd">http://cxf.apache.org/schemas/jaxws.xsd</a> <br />
<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>  <br />
http://www.springframework.org/schema/beans/spring-beans.xsd"
default-autowire="byName" default-lazy-init="true"&gt;
&lt;!-- ws clinet --&gt;
&lt;bean id="webServiceSampleClient" class="cn.org.coral.biz.examples.webservice.WebServiceSample"
factory-bean="webServiceSampleClientFactory" factory-method="create" /&gt;
&lt;bean id="webServiceSampleClientFactory"
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"&gt;
&lt;property name="serviceClass"
value="cn.org.coral.biz.examples.webservice.WebServiceSample" /&gt;
&lt;property name="address"
value="http://88.148.29.54:8080/aio/services/WebServiceSample" /&gt;
&lt;property name="outInterceptors"&gt;
&lt;list&gt;
&lt;bean
class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" /&gt;
&lt;ref bean="wss4jOutConfiguration" /&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="wss4jOutConfiguration"
class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"&gt;
&lt;property name="properties"&gt;
&lt;map&gt;
&lt;entry key="action" value="UsernameToken" /&gt;
&lt;entry key="user" value="ws-client" /&gt;
&lt;entry key="passwordType" value="PasswordText" /&gt;
&lt;entry&gt;
&lt;key&gt;
&lt;value&gt;passwordCallbackRef&lt;/value&gt;
&lt;/key&gt;
&lt;ref bean="passwordCallback" /&gt;
&lt;/entry&gt;
&lt;/map&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="passwordCallback"
class="cn.org.coral.biz.examples.webservice.handler.WsClinetAuthHandler"&gt;
&lt;/bean&gt;
&lt;/beans&gt;
</pre>
<br />
<br />
4.客户端添加passwordCallback类,通过该类设置访问口令 <br />
<pre class="java" name="code">package cn.org.coral.biz.examples.webservice.handler;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.CallbackHandler;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.apache.ws.security.WSPasswordCallback;
public class WsClinetAuthHandler  implements CallbackHandler{
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
for (int i = 0; i &lt; callbacks.length; i++) {
WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
int usage = pc.getUsage();
System.out.println("identifier: " + pc.getIdentifer());
System.out.println("usage: " + pc.getUsage());
if (usage == WSPasswordCallback.USERNAME_TOKEN) {
// username token pwd...
pc.setPassword("admin");
} else if (usage == WSPasswordCallback.SIGNATURE) {
// set the password for client's keystore.keyPassword
pc.setPassword("keyPassword");
}
}
}
}
</pre>
<br />
<br />
5.junit单元测试程序: <br />
<pre class="java" name="code">package cn.org.coral.biz.examples.webservice;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import org.springframework.util.Assert;
public class TestWebService extends AbstractDependencyInjectionSpringContextTests {
WebServiceSample webServiceSampleClient;
@Override
protected String[] getConfigLocations() {
setAutowireMode(AUTOWIRE_BY_NAME);
return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };
}
/**
* @param webServiceSampleClient the webServiceSampleClient to set
*/
public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {
this.webServiceSampleClient = webServiceSampleClient;
}
public void testSay(){
String result = webServiceSampleClient.say(" world");
Assert.hasText(result);
}
}
</pre>
<br />
 <img src ="http://www.blogjava.net/jacally/aggbug/187161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-03-19 10:10 <a href="http://www.blogjava.net/jacally/archive/2008/03/19/187161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]WebService开发笔记 2 -- VS 2005 访问WebServcie更简单</title><link>http://www.blogjava.net/jacally/articles/186656.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Sun, 16 Mar 2008 13:41:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/186656.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/186656.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/186656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/186656.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/186656.html</trackback:ping><description><![CDATA[<br />
网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp; 作者: <a href="http://lib.javaeye.com">jacally</a>&nbsp; 链接：<a style="color: red" href="http://lib.javaeye.com/blog/170628">http://lib.javaeye.com/blog/170628</a>&nbsp; 发表时间: 2008年03月12日 <br />
<br />
声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！ <br />
<br />
1.首先在vs中新建项目 <br />
<img alt="" src="http://lib.javaeye.com/upload/picture/pic/9222/0f3a1ad5-34c4-35b0-94d0-52d6cd25e7a1.jpg?1205321363" /> <br />
<br />
2.添加web引用.... <br />
<img alt="" src="http://lib.javaeye.com/upload/picture/pic/9220/e5e21986-a77f-3918-8b12-8290e62456a1.jpg?1205321362" /> <br />
<br />
3.输入WebService地址：http://88.148.29.54:8080/aio/services/WebServiceSample?wsdl最后点击&#8220;添加引用&#8221; <br />
<img alt="" src="http://lib.javaeye.com/upload/picture/pic/9218/d394c612-a53d-340a-bc28-fb405952b9b8.jpg?1205321361" /> <br />
<br />
4.创建一个简单的form <br />
<img alt="" src="http://lib.javaeye.com/upload/picture/pic/9216/7be4342c-d86e-3dec-a7fd-325a2257f0b7.jpg?1205321360" /> <br />
<br />
5.编写按钮事件代码 <br />
<br />
<pre class="c#" name="code">using System;<br />
using System.Collections.Generic;<br />
using System.ComponentModel;<br />
using System.Data;<br />
using System.Drawing;<br />
using System.Text;<br />
using System.Net;<br />
<br />
using System.Windows.Forms;<br />
<br />
<br />
using WindowsApplication1.WebReference;<br />
<br />
namespace WindowsApplication1<br />
{<br />
public partial class Form1 : Form<br />
{<br />
WindowsApplication1.WebReference.WebServiceSampleImplService service = null;<br />
<br />
public Form1()<br />
{<br />
<br />
InitializeComponent();<br />
}<br />
<br />
private void button1_Click(object sender, EventArgs e)<br />
{<br />
<br />
<br />
String str = "";<br />
<br />
try<br />
{<br />
str = service.say("Libin");<br />
<br />
}<br />
catch (Exception we)<br />
{<br />
str = we.Message;<br />
}<br />
<br />
//MessageBox.Show(str);<br />
<br />
textBox1.Text = str ;<br />
<br />
<br />
}<br />
<br />
private void Form1_Load(object sender, EventArgs e)<br />
{<br />
service = new WebServiceSampleImplService();<br />
<br />
label1.Text = "WS.url:" + service.Url + "\r\n";<br />
<br />
}<br />
<br />
private void button2_Click(object sender, EventArgs e)<br />
{<br />
String str = "";<br />
<br />
try<br />
{<br />
User user = new User();<br />
user.id = 1;<br />
user.name = "Libin";<br />
str = "userName:" + service.sayUserName(user);<br />
<br />
}<br />
catch (Exception we)<br />
{<br />
str = we.Message;<br />
}<br />
<br />
//MessageBox.Show(str);<br />
<br />
textBox1.Text = str;<br />
}<br />
<br />
private void button3_Click(object sender, EventArgs e)<br />
{<br />
<br />
String str = "";<br />
try<br />
{<br />
<br />
Object[]  users = service.findUsers();<br />
for (int i = 0; i &lt; users.Length; i++)<br />
{<br />
User user = (User)users[i];<br />
str += "id:"+user.id + "  name:" + user.name + "\r\n";<br />
}<br />
<br />
}<br />
catch (Exception we)<br />
{<br />
str = we.Message;<br />
}<br />
<br />
//MessageBox.Show(str);<br />
<br />
textBox1.Text = str;<br />
}<br />
}<br />
}</pre>
<br />
<br />
6.最后点击调试运行，或按F5运行，通过点击按钮就可以看到调用WebService的运行结果了 <br />
<img alt="" src="http://lib.javaeye.com/upload/picture/pic/9214/d4de199c-d6e7-3e39-a69f-494a38b972c9.jpg?1205321360" /> <br />
<span style="color: red"><a style="color: red" href="http://lib.javaeye.com/blog/170628#comments">本文的讨论也很精彩，浏览讨论&gt;&gt;</a> </span><br />
<br />
<br />
<span style="color: #e28822">JavaEye推荐</span> <br />
<a href="/adverts/41" target="_blank"><span style="font-weight: bold; color: red">中国领先的电子商务网站－淘宝网招贤纳士，诚聘Java工程师</span></a> <br />
<br />
<br />
<br />
文章来源:<a href="http://lib.javaeye.com/blog/170628">http://lib.javaeye.com/blog/170628</a> 
<img src ="http://www.blogjava.net/jacally/aggbug/186656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-03-16 21:41 <a href="http://www.blogjava.net/jacally/articles/186656.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WebService开发笔记 1 -- 利用cxf开发WebService竟然如此简单</title><link>http://www.blogjava.net/jacally/articles/186655.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Sun, 16 Mar 2008 13:40:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/186655.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/186655.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/186655.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/186655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/186655.html</trackback:ping><description><![CDATA[现在的项目中需要用到SOA概念的地方越来越多,最近我接手的一个项目中就提出了这样的业务要求,需要在.net开发的客户端系统中访问java开发的web系统,这样的业务需求自然需要通过WebService进行信息数据的操作。下面就将我们在开发中摸索的一点经验教训总结以下，以供大家参考. <br />
<br />
我们项目的整个架构使用的比较流行的WSH MVC组合,即webwork2 + Spring + Hibernate; <br />
1.首先集成Apacha CXF WebService 到 Spring 框架中; <br />
apache cxf 下载地址:<a href="http://people.apache.org/dist/incubator/cxf/2.0.4-incubator/apache-cxf-2.0.4-incubator.zip" target="_blank">http://people.apache.org/dist/incubator/cxf/2.0.4-incubator/apache-cxf-2.0.4-incubator.zip</a> <br />
在spring context配置文件中引入以下cxf配置 <br />
<pre class="xml" name="code">	&lt;import resource="classpath*:META-INF/cxf/cxf.xml" /&gt;<br />
&lt;import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" /&gt;<br />
&lt;import resource="classpath*:META-INF/cxf/cxf-servlet.xml" /&gt;<br />
</pre>
<br />
在web.xml中添加过滤器: <br />
<pre class="xml" name="code">	&lt;servlet&gt;<br />
&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;<br />
org.apache.cxf.transport.servlet.CXFServlet<br />
&lt;/servlet-class&gt;<br />
&lt;/servlet&gt;<br />
&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;<br />
</pre>
<br />
<br />
2.开发服务端WebService接口: <br />
<pre class="java" name="code">/**<br />
* WebService接口定义类.<br />
* <br />
* 使用@WebService将接口中的所有方法输出为Web Service.<br />
* 可用annotation对设置方法、参数和返回值在WSDL中的定义.<br />
*/<br />
@WebService<br />
public interface WebServiceSample {<br />
<br />
<br />
/**<br />
* 一个简单的方法,返回一个字符串<br />
* @param hello<br />
* @return<br />
*/<br />
String say(String hello);<br />
<br />
/**<br />
* 稍微复杂一些的方法,传递一个对象给服务端处理<br />
* @param user<br />
* @return<br />
*/<br />
String sayUserName(<br />
@WebParam(name = "user") <br />
UserDTO user);<br />
<br />
/**<br />
* 最复杂的方法,返回一个List封装的对象集合<br />
* @return<br />
*/<br />
public <br />
@WebResult(partName="o")<br />
ListObject findUsers();<br />
<br />
}<br />
</pre>
<br />
由简单到复杂定义了三个接口,模拟业务需求; <br />
<br />
3.实现接口 <br />
<pre class="java" name="code">/**<br />
* WebService实现类.<br />
* <br />
* 使用@WebService指向Interface定义类即可.<br />
*/<br />
@WebService(endpointInterface = "cn.org.coral.biz.examples.webservice.WebServiceSample")<br />
public class WebServiceSampleImpl implements WebServiceSample {<br />
<br />
public String sayUserName(UserDTO user) {<br />
return "hello "+user.getName();<br />
}<br />
<br />
public String say(String hello) {<br />
return "hello "+hello;<br />
}<br />
<br />
public ListObject findUsers() {<br />
ArrayList&lt;Object&gt; list = new ArrayList&lt;Object&gt;();<br />
<br />
list.add(instancUser(1,"lib"));<br />
list.add(instancUser(2,"mld"));<br />
list.add(instancUser(3,"lq"));<br />
list.add(instancUser(4,"gj"));<br />
ListObject o = new ListObject();<br />
o.setList(list);<br />
return o;<br />
}<br />
<br />
private UserDTO instancUser(Integer id,String name){<br />
UserDTO user = new UserDTO();<br />
user.setId(id);<br />
user.setName(name);<br />
return user;<br />
}<br />
}<br />
</pre>
<br />
<br />
4.依赖的两个类:用户对象与List对象 <br />
<pre class="java" name="code">/**<br />
* Web Service传输User信息的DTO.<br />
* <br />
* 分离entity类与web service接口间的耦合，隔绝entity类的修改对接口的影响.<br />
* 使用JAXB 2.0的annotation标注JAVA-XML映射，尽量使用默认约定.<br />
* <br />
*/<br />
@XmlAccessorType(XmlAccessType.FIELD)<br />
@XmlType(name = "User")<br />
public class UserDTO {<br />
<br />
protected Integer id;<br />
<br />
protected String name;<br />
<br />
public Integer getId() {<br />
return id;<br />
}<br />
<br />
public void setId(Integer value) {<br />
id = value;<br />
}<br />
<br />
public String getName() {<br />
return name;<br />
}<br />
<br />
public void setName(String value) {<br />
name = value;<br />
}<br />
}<br />
</pre>
<br />
关于List对象,参照了<a href="http://www.javaeye.com/post/253814" target="_blank">有关JWS的一个问题</a>中的描述:DK6.0 自带的WebService中 WebMethod的参数好像不能是ArrayList 或者其他List <br />
传递List需要将List 包装在其他对象内部才行 (个人理解 如有不对请指出) ,我在实践中也遇到了此类问题.通过以下封装的对象即可以传递List对象. <br />
<pre class="java" name="code">/**<br />
* &lt;p&gt;Java class for listObject complex type.<br />
* <br />
* &lt;p&gt;The following schema fragment specifies the expected content contained within this class.<br />
* <br />
* &lt;pre&gt;<br />
* &lt;complexType name="listObject"&gt;<br />
*   &lt;complexContent&gt;<br />
*     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType"&gt;<br />
*       &lt;sequence&gt;<br />
*         &lt;element name="list" type="{http://www.w3.org/2001/XMLSchema}anyType" maxOccurs="unbounded" minOccurs="0"/&gt;<br />
*       &lt;/sequence&gt;<br />
*     &lt;/restriction&gt;<br />
*   &lt;/complexContent&gt;<br />
* &lt;/complexType&gt;<br />
* &lt;/pre&gt;<br />
* <br />
* <br />
*/<br />
@XmlAccessorType(XmlAccessType.FIELD)<br />
@XmlType(name = "listObject", propOrder = { "list" })<br />
public class ListObject {<br />
<br />
@XmlElement(nillable = true)<br />
protected List&lt;Object&gt; list;<br />
<br />
/**<br />
* Gets the value of the list property.<br />
* <br />
* &lt;p&gt;<br />
* This accessor method returns a reference to the live list,<br />
* not a snapshot. Therefore any modification you make to the<br />
* returned list will be present inside the JAXB object.<br />
* This is why there is not a &lt;CODE&gt;set&lt;/CODE&gt; method for the list property.<br />
* <br />
* &lt;p&gt;<br />
* For example, to add a new item, do as follows:<br />
* &lt;pre&gt;<br />
*    getList().add(newItem);<br />
* &lt;/pre&gt;<br />
* <br />
* <br />
* &lt;p&gt;<br />
* Objects of the following type(s) are allowed in the list<br />
* {@link Object }<br />
* <br />
* <br />
*/<br />
public List&lt;Object&gt; getList() {<br />
if (list == null) {<br />
list = new ArrayList&lt;Object&gt;();<br />
}<br />
return this.list;<br />
}<br />
<br />
public void setList(ArrayList&lt;Object&gt; list) {<br />
this.list = list;<br />
}<br />
<br />
}<br />
</pre>
<br />
<br />
5.WebService 服务端 spring 配置文件 ws-context.xml <br />
<pre class="xml" name="code">&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
xmlns:jaxws="http://cxf.apache.org/jaxws"<br />
xsi:schemaLocation="http://cxf.apache.org/jaxws <a href="http://cxf.apache.org/schemas/jaxws.xsd">http://cxf.apache.org/schemas/jaxws.xsd</a> <br />
<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>  <br />
http://www.springframework.org/schema/beans/spring-beans.xsd"<br />
default-autowire="byName" default-lazy-init="true"&gt;<br />
<br />
&lt;jaxws:endpoint id="webServiceSample"<br />
address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"/&gt;<br />
<br />
&lt;/beans&gt;<br />
</pre>
<br />
<br />
WebService 客户端 spring 配置文件 wsclient-context.xml <br />
<pre class="xml" name="code">&lt;beans xmlns="http://www.springframework.org/schema/beans"<br />
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />
xmlns:jaxws="http://cxf.apache.org/jaxws"<br />
xsi:schemaLocation="http://cxf.apache.org/jaxws <br />
<a href="http://cxf.apache.org/schemas/jaxws.xsd">http://cxf.apache.org/schemas/jaxws.xsd</a> <br />
<a href="http://www.springframework.org/schema/beans">http://www.springframework.org/schema/beans</a>  <br />
http://www.springframework.org/schema/beans/spring-beans.xsd"<br />
default-autowire="byName" default-lazy-init="true"&gt;<br />
<br />
&lt;!-- ws client --&gt;<br />
&lt;bean id="identityValidateServiceClient" class="cn.org.coral.admin.service.IdentityValidateService"<br />
factory-bean="identityValidateServiceClientFactory" factory-method="create" /&gt;<br />
<br />
&lt;bean id="identityValidateServiceClientFactory"<br />
class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"&gt;<br />
&lt;property name="serviceClass"<br />
value="cn.org.coral.admin.service.IdentityValidateService" /&gt;<br />
&lt;property name="address"<br />
value="http://88.148.29.54:8080/coral/services/IdentityValidateService"/&gt;<br />
&lt;/bean&gt;<br />
<br />
&lt;/beans&gt;<br />
</pre>
<br />
6.发布到tomcat服务器以后通过以下地址即可查看自定义的webservice接口生成的wsdl: <br />
http://88.148.29.54:8080/aio/services/WebServiceSample?wsdl <br />
<br />
7.调用WebService接口的Junit单元测试程序 <br />
<pre class="java" name="code">package test.coral.sample;<br />
<br />
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;<br />
<br />
import cn.org.coral.biz.examples.webservice.WebServiceSample;<br />
import cn.org.coral.biz.examples.webservice.dto.UserDTO;<br />
<br />
public class TestWebServiceSample extends<br />
AbstractDependencyInjectionSpringContextTests {<br />
WebServiceSample webServiceSampleClient;<br />
<br />
public void setWebServiceSampleClient(WebServiceSample webServiceSampleClient) {<br />
this.webServiceSampleClient = webServiceSampleClient;<br />
}<br />
<br />
@Override<br />
protected String[] getConfigLocations() {<br />
setAutowireMode(AUTOWIRE_BY_NAME);<br />
//spring 客户端配置文件保存位置<br />
return new String[] { "classpath:/cn/org/coral/biz/examples/webservice/wsclient-context.xml" };<br />
}<br />
<br />
public void testWSClinet(){<br />
Assert.hasText(webServiceSampleClient.say(" world"));<br />
}<br />
}<br />
<br />
</pre>
<img src ="http://www.blogjava.net/jacally/aggbug/186655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-03-16 21:40 <a href="http://www.blogjava.net/jacally/articles/186655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]CAS 单点登录安装笔记4 -- asp.net client端的设置</title><link>http://www.blogjava.net/jacally/articles/186657.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Sun, 02 Mar 2008 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/186657.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/186657.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/186657.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/186657.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/186657.html</trackback:ping><description><![CDATA[<br />
网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
作者: <a href="http://lib.javaeye.com">jacally</a>&nbsp;
链接：<a href="http://lib.javaeye.com/blog/166619" style="color: red;">http://lib.javaeye.com/blog/166619</a>&nbsp;
发表时间: 2008年03月02日
<br />
<br />
声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
<br />
<br />
CAS 单点登录安装笔记4
<br />
--- asp.net client端的设置
<br />
<br />
1、首先修改web.Config文件，加入以下设置：
<br />
<pre name="code" class="xml">&lt;authentication mode="Forms" &gt;<br />
&lt;forms name="casauth" loginUrl="login.aspx" /&gt;<br />
&lt;/authentication&gt;<br />
&lt;authorization&gt;<br />
&lt;deny users="?" /&gt;<br />
&lt;/authorization&gt;<br />
</pre>
<br />
本人对.net不是很熟悉，感觉这里的配置类似java web应用程序中的过滤器，当用户访问web页时首先跳转到login.aspx页面进行验证。
<br />
<br />
2、加入以下c#代码到login.aspx页面的加载事件中：
<br />
<pre name="code" class="c#">    //CAS 身份验证 服务器地址<br />
private const string CASHOST = "https://sso.gzps.net:8443/cas/";<br />
<br />
protected void Page_Load(object sender, EventArgs e)<br />
{<br />
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();<br />
<br />
// Look for the "ticket=" after the "?" in the URL<br />
string tkt = Request.QueryString["ticket"];<br />
<br />
// This page is the CAS service=, but discard any query string residue<br />
string service = Request.Url.GetLeftPart(UriPartial.Path);<br />
<br />
// First time through there is no ticket=, so redirect to CAS login<br />
if (tkt == null || tkt.Length == 0)<br />
{<br />
string redir = CASHOST + "login?" +<br />
"service=" + service;<br />
Response.Redirect(redir);<br />
return;<br />
}<br />
<br />
// Second time (back from CAS) there is a ticket= to validate<br />
string validateurl = CASHOST + "serviceValidate?" +<br />
"ticket=" + tkt + "&amp;"+<br />
"service=" + service;<br />
StreamReader Reader = new StreamReader( new WebClient().OpenRead(validateurl));<br />
string resp = Reader.ReadToEnd();<br />
// I like to have the text in memory for debugging rather than parsing the stream<br />
<br />
// Some boilerplate to set up the parse.<br />
NameTable nt = new NameTable();<br />
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);<br />
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);<br />
XmlTextReader reader = new XmlTextReader(resp, XmlNodeType.Element, context);<br />
<br />
string netid = null;<br />
<br />
// A very dumb use of XML. Just scan for the "user". If it isn't there, its an error.<br />
while (reader.Read())<br />
{<br />
if (reader.IsStartElement()) {<br />
string tag = reader.LocalName;<br />
if (tag=="user")<br />
netid = reader.ReadString();<br />
}<br />
}<br />
// if you want to parse the proxy chain, just add the logic above<br />
reader.Close();<br />
// If there was a problem, leave the message on the screen. Otherwise, return to original page.<br />
if (netid == null)<br />
{<br />
Label1.Text = "CAS returned to this application, but then refused to validate your identity.";<br />
}<br />
else<br />
{<br />
Session["UserName"] = netid;<br />
Label1.Text = "Welcome " + netid;<br />
FormsAuthentication.RedirectFromLoginPage(netid, false); // set netid in ASP.NET blocks<br />
}<br />
<br />
}<br />
}<br />
</pre>
<br />
<br />
以上代码参照了ja-sig网站的解决方案：<a href="http://www.ja-sig.org/wiki/display/CASC/ASP.NET+Forms+Authentication" target="_blank">http://www.ja-sig.org/wiki/display/CASC/ASP.NET+Forms+Authentication</a>
<br />
<br />
3、以为这样就可以了，运行时可以跳到sso服务器进行验证，但跳转以后报以下错误：
<br />
" System.Net.WebException。 基础连接已关闭。 无法建立与远程服务器信任关系 "。
<br />
应该与CAS Server端安装了数字证书，而.net Client端并没有安装相应的证书有关。
<br />
可以通过<a href="http://hi.baidu.com/wjmd521/blog/item/d0244e60edc9a045ebf8f898.html" target="_blank">配置IIS服务器，支持HTTPS SSL协议实现安全数据交换</a>中介绍的步骤导入CAS 服务端的数字证书,或者通过<a href="http://support.microsoft.com/kb/823177/" target="_blank">http://support.microsoft.com/kb/823177/</a>上介绍的解决方案进行处理：
<br />
实现类
<br />
<pre name="code" class="c#">using System.Net;<br />
using System.Security.Cryptography.X509Certificates;<br />
<br />
public class MyPolicy : ICertificatePolicy {<br />
public bool CheckValidationResult(<br />
ServicePoint srvPoint<br />
, X509Certificate certificate<br />
, WebRequest request<br />
, int certificateProblem) {<br />
<br />
//Return True to force the certificate to be accepted.<br />
return true;<br />
<br />
} // end CheckValidationResult<br />
} // class MyPolicy<br />
<br />
</pre>
<br />
客户端代码中包含下列代码：
<br />
<pre name="code" class="#c">   System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();<br />
</pre>
<br />
<br />
所有代码见附件WebSite.rar,将其部署到你的IIS服务器就可以了。
<br />
关于IIS服务器的设置见<a href="http://tech.163.com/special/00091PDS/aspnet.html" target="_blank">asp.net一夜速成教程</a>
<br />
<span style="color: red;">
<a href="http://lib.javaeye.com/blog/166619#comments" style="color: red;">本文的讨论也很精彩，浏览讨论&gt;&gt;</a>
</span>
<br />
<br />
<br />
<span style="color: rgb(226, 136, 34);">JavaEye推荐</span>
<br />
<a href="/adverts/41" target="_blank"><span style="color: red; font-weight: bold;">中国领先的电子商务网站－淘宝网招贤纳士，诚聘Java工程师</span></a>
<br />
<br />
<br />
<br />
文章来源:<a href="http://lib.javaeye.com/blog/166619">http://lib.javaeye.com/blog/166619</a>
<img src ="http://www.blogjava.net/jacally/aggbug/186657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-03-02 11:52 <a href="http://www.blogjava.net/jacally/articles/186657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]CAS 单点登录安装笔记3 -- 与acegi集成</title><link>http://www.blogjava.net/jacally/articles/186658.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Thu, 28 Feb 2008 15:39:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/186658.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/186658.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/186658.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/186658.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/186658.html</trackback:ping><description><![CDATA[<br />
网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
作者: <a href="http://lib.javaeye.com">jacally</a>&nbsp;
链接：<a href="http://lib.javaeye.com/blog/165980" style="color: red;">http://lib.javaeye.com/blog/165980</a>&nbsp;
发表时间: 2008年02月28日
<br />
<br />
声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
<br />
<br />
CAS 单点登录安装笔记3
<br />
-- 与acegi集成
<br />
<br />
在我的项目中应用了acigi安全框架,以下是结合yale cas单点登录系统进行的相关配置
<br />
<pre name="code" class="xml">
&lt;!-- =========  Acegi as a CAS Client的配置============= --&gt;
&lt;bean id="authenticationProcessingFilter"
class="org.acegisecurity.ui.cas.CasProcessingFilter"&gt;
&lt;property name="authenticationManager"
ref="authenticationManager" /&gt;
&lt;property name="authenticationFailureUrl"
value="/login.do?login_error=1" /&gt;
&lt;property name="defaultTargetUrl" value="/main.do" /&gt;
&lt;property name="filterProcessesUrl"&gt;
&lt;value&gt;/j_acegi_cas_security_check&lt;/value&gt;
&lt;/property&gt;
&lt;property name="rememberMeServices" ref="rememberMeServices" /&gt;
&lt;property name="exceptionMappings"&gt;
&lt;value&gt;
org.acegisecurity.AuthenticationServiceException=/login.do?login_error=user_not_found_error
org.acegisecurity.BadCredentialsException=/login.do?login_error=user_psw_error
org.acegisecurity.concurrent.ConcurrentLoginException=/login.do?login_error=too_many_user_error
org.acegisecurity.DisabledException=/login.do?login_error=disabled_user_error
&lt;/value&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"&gt;
&lt;property name="authenticationEntryPoint"&gt;
&lt;ref local="casProcessingFilterEntryPoint"/&gt;
&lt;/property&gt;
&lt;property name="accessDeniedHandler"&gt;
&lt;bean
class="org.acegisecurity.ui.AccessDeniedHandlerImpl"&gt;
&lt;property name="errorPage"
value="/errors/accessDenied.jsp" /&gt;
&lt;/bean&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;!-- cas config --&gt;
&lt;bean id="casProcessingFilterEntryPoint" class="org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint"&gt;
&lt;property name="loginUrl"&gt;&lt;value&gt;https://sso.gzps.net:8443/cas/login&lt;/value&gt;&lt;/property&gt;
&lt;property name="serviceProperties"&gt;&lt;ref local="serviceProperties"/&gt;&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"&gt;
&lt;property name="providers"&gt;
&lt;list&gt;
&lt;ref local="casAuthenticationProvider"/&gt;
&lt;/list&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="casAuthenticationProvider" class="org.acegisecurity.providers.cas.CasAuthenticationProvider"&gt;
&lt;property name="casAuthoritiesPopulator"&gt;&lt;ref bean="casAuthoritiesPopulator"/&gt;&lt;/property&gt;
&lt;property name="casProxyDecider"&gt;&lt;ref local="casProxyDecider"/&gt;&lt;/property&gt;
&lt;property name="ticketValidator"&gt;&lt;ref local="casProxyTicketValidator"/&gt;&lt;/property&gt;
&lt;property name="statelessTicketCache"&gt;&lt;ref local="statelessTicketCache"/&gt;&lt;/property&gt;
&lt;property name="key"&gt;&lt;value&gt;my_password_for_this_auth_provider_only&lt;/value&gt;&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="casProxyTicketValidator" class="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator"&gt;
&lt;property name="casValidate"&gt;&lt;value&gt;https://sso.gzps.net:8443/cas/proxyValidate&lt;/value&gt;&lt;/property&gt;
&lt;property name="serviceProperties"&gt;&lt;ref local="serviceProperties"/&gt;&lt;/property&gt;
&lt;/bean&gt;
&lt;!--
&lt;bean id="casProxyDecider" class="org.acegisecurity.providers.cas.proxy.AcceptAnyCasProxy" /&gt;
--&gt;
&lt;bean id="casProxyDecider" class="org.acegisecurity.providers.cas.proxy.RejectProxyTickets" /&gt;
&lt;bean id="serviceProperties" class="org.acegisecurity.ui.cas.ServiceProperties"&gt;
&lt;property name="service"&gt;
&lt;value&gt;http://localhost:8080/aio/j_acegi_cas_security_check&lt;/value&gt;
&lt;/property&gt;
&lt;property name="sendRenew"&gt;
&lt;value&gt;false&lt;/value&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="statelessTicketCache" class="org.acegisecurity.providers.cas.cache.EhCacheBasedTicketCache"&gt;
&lt;property name="cache"&gt;
&lt;bean class="org.springframework.cache.ehcache.EhCacheFactoryBean"&gt;
&lt;property name="cacheManager"&gt;
&lt;bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/&gt;
&lt;/property&gt;
&lt;property name="cacheName" value="userCache"/&gt;
&lt;/bean&gt;
&lt;/property&gt;
&lt;/bean&gt;
&lt;bean id="casAuthoritiesPopulator" class="org.acegisecurity.providers.cas.populator.DaoCasAuthoritiesPopulator"&gt;<br />
&lt;property name="userDetailsService"&gt;&lt;ref local="userDetailsService"/&gt;&lt;/property&gt;<br />
&lt;/bean&gt;<br />
<br />
&lt;bean id="casProcessingFilter" class="org.acegisecurity.ui.cas.CasProcessingFilter"&gt;<br />
&lt;property name="authenticationManager"&gt;&lt;ref local="authenticationManager"/&gt;&lt;/property&gt;<br />
&lt;property name="authenticationFailureUrl"&gt;&lt;value&gt;/casfailed.jsp&lt;/value&gt;&lt;/property&gt;<br />
&lt;property name="defaultTargetUrl"&gt;&lt;value&gt;/&lt;/value&gt;&lt;/property&gt;<br />
&lt;property name="filterProcessesUrl"&gt;&lt;value&gt;/j_acegi_cas_security_check&lt;/value&gt;&lt;/property&gt;<br />
&lt;/bean&gt;<br />
<br />
<br />
&lt;!-- ======================================================= --&gt;<br />
<br />
</pre>
<br />
<span style="color: red;">
<a href="http://lib.javaeye.com/blog/165980#comments" style="color: red;">本文的讨论也很精彩，浏览讨论&gt;&gt;</a>
</span>
<br />
<br />
<br />
<span style="color: #e28822;">JavaEye推荐</span>
<br />
<a href="/adverts/41" target="_blank"><span style="color: red; font-weight: bold;">中国领先的电子商务网站－淘宝网招贤纳士，诚聘Java工程师</span></a>
<br />
<br />
<br />
<br />
文章来源:<a href="http://lib.javaeye.com/blog/165980">http://lib.javaeye.com/blog/165980</a> 
<img src ="http://www.blogjava.net/jacally/aggbug/186658.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-02-28 23:39 <a href="http://www.blogjava.net/jacally/articles/186658.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]CAS 单点登录安装笔记2 -- 配置CAS,访问自己的用户表</title><link>http://www.blogjava.net/jacally/articles/186659.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Wed, 27 Feb 2008 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/186659.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/186659.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/186659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/186659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/186659.html</trackback:ping><description><![CDATA[<br />
网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
作者: <a href="http://lib.javaeye.com">jacally</a>&nbsp;
链接：<a href="http://lib.javaeye.com/blog/165538" style="color: red;">http://lib.javaeye.com/blog/165538</a>&nbsp;
发表时间: 2008年02月27日
<br />
<br />
声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
<br />
<br />
CAS 单点登录安装笔记2
<br />
<br />
<br />
1.修改cas/webapp/WEB-INF/deployerConfigContext.xml
<br />
加入以下定义:
<br />
<pre name="code" class="xml">	&lt;!-- 数据源定义 --&gt;<br />
&lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"&gt;<br />
&lt;property name="driverClassName" value="${db.driver}" /&gt;<br />
&lt;property name="url" value="${db.url}" /&gt;<br />
&lt;property name="username" value="${db.username}" /&gt;<br />
&lt;property name="password" value="${db.password}" /&gt;       <br />
&lt;/bean&gt;<br />
&lt;!-- <br />
passwordEncoder　使用Md5算法加密 <br />
--&gt;<br />
&lt;bean id="passwordEncoder"<br />
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName"&gt;   <br />
&lt;constructor-arg value="MD5"/&gt;<br />
&lt;/bean&gt;<br />
</pre>
<br />
<br />
2.屏蔽原有验证方法:
<br />
<pre name="code" class="xml">				&lt;!-- <br />
&lt;bean<br />
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /&gt;<br />
--&gt;<br />
</pre>
<br />
<br />
3.加入通过访问数据库进行验证的handler:
<br />
<pre name="code" class="xml">				&lt;bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"&gt;<br />
&lt;property name="sql" value="select password from CORE_USERS where logid=?" /&gt;<br />
&lt;property name="passwordEncoder" ref="passwordEncoder"/&gt;<br />
&lt;property name="dataSource" ref="dataSource" /&gt;<br />
&lt;/bean&gt;	<br />
</pre>
<br />
<br />
4.修改cas\webapp\WEB-INF\cas.properties,定义数据库连接资源,本例子是连接的oracle数据库
<br />
<pre name="code" class="properties">db.driver=oracle.jdbc.driver.OracleDriver<br />
db.url=jdbc\:oracle\:thin\:@192.168.1.1\:1521\:xxxx<br />
db.username=xxxx<br />
db.password=xxxx<br />
</pre>
<br />
<br />
5.增加相关jar包到cas\webapp\WEB-INF\lib\目录下:
<br />
cas-server-support-jdbc-3.2.jar (cas连接数据库的支持包)
<br />
ojdbc14.jar (连接oracle数据的jdbc驱动程序)
<br />
<span style="color: red;">
<a href="http://lib.javaeye.com/blog/165538#comments" style="color: red;">本文的讨论也很精彩，浏览讨论&gt;&gt;</a>
</span>
<br />
<br />
<br />
<span style="color: #e28822;">JavaEye推荐</span>
<br />
<a href="/adverts/41" target="_blank"><span style="color: red; font-weight: bold;">中国领先的电子商务网站－淘宝网招贤纳士，诚聘Java工程师</span></a>
<br />
<br />
<br />
<br />
文章来源:<a href="http://lib.javaeye.com/blog/165538">http://lib.javaeye.com/blog/165538</a> 
<img src ="http://www.blogjava.net/jacally/aggbug/186659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-02-27 17:46 <a href="http://www.blogjava.net/jacally/articles/186659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]CAS 单点登录安装笔记1 -- 基本设置与数字证书的安装</title><link>http://www.blogjava.net/jacally/articles/186660.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Tue, 26 Feb 2008 08:35:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/186660.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/186660.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/186660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/186660.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/186660.html</trackback:ping><description><![CDATA[<br />
网站: <a href="http://www.javaeye.com">JavaEye</a>&nbsp;
作者: <a href="http://lib.javaeye.com">jacally</a>&nbsp;
链接：<a href="http://lib.javaeye.com/blog/165196" style="color: red;">http://lib.javaeye.com/blog/165196</a>&nbsp;
发表时间: 2008年02月26日
<br />
<br />
声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
<br />
<br />
安装JA-SIG SSO系统笔记1
<br />
<br />
(关于配置访问数据库的用户表见<a href="http://lib.javaeye.com/blog/165538" target="_blank">安装JA-SIG SSO系统笔记2</a>)
<br />
(与acegi结合配置见<a href="http://lib.javaeye.com/blog/165980" target="_blank">安装JA-SIG SSO系统笔记3</a>)
<br />
(ASP.NET client端的设置见<a href="http://lib.javaeye.com/blog/166619" target="_blank">安装JA-SIG SSO系统笔记4</a>)
<br />
<br />
ps:配置中的文件路径根据自己的实际情况的设定
<br />
<br />
1.安装JA-SIG 到 TOMCAT;
<br />
JA-SIG下载地址:
<br />
<a href="http://www.ja-sig.org/products/cas/downloads/index.html" target="_blank">http://www.ja-sig.org/products/cas/downloads/index.html</a>
<br />
<br />
2.生成数字证书,见批处理文件"cas 生成数字证书.bat";
<br />
<br />
3.配置Tomcat的HTTPS服务,修改server.xml
<br />
<pre name="code" class="xml">		&lt;Connector protocol="org.apache.coyote.http11.Http11Protocol"<br />
port="8443" minSpareThreads="5" maxSpareThreads="75"<br />
enableLookups="true" disableUploadTimeout="true" <br />
acceptCount="100"  maxThreads="200"<br />
scheme="https" secure="true" SSLEnabled="true"<br />
keystoreFile="C:/Documents and Settings/Administrator/.keystore" keystorePass="changeit"<br />
truststoreFile="D:/Java/jdk1.6.0_02/jre/lib/security/cacerts"<br />
clientAuth="false" sslProtocol="TLS"/&gt;<br />
</pre>
<br />
<br />
4.导出 SERVER 的证书，用来给所有需要用到的客户端导入,见"导出 cas 数字证书.bat"
<br />
<br />
5.在客户端的 JVM 里导入信任的 SERVER 的证书 ( 根据情况有可能需要管理员权限 ),见"导入 cas 证书.bat"；
<br />
<br />
5.修改客户端服务程序,加入cas过滤器,修改web.xml
<br />
<pre name="code" class="xml">	&lt;!-- CAS --&gt;<br />
&lt;filter&gt;<br />
&lt;filter-name&gt;CAS Filter&lt;/filter-name&gt;<br />
&lt;filter-class&gt;edu.yale.its.tp.cas.client.filter.CASFilter&lt;/filter-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.loginUrl&lt;/param-name&gt;<br />
&lt;param-value&gt;https://sso.gzps.net:8443/cas/login&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.validateUrl&lt;/param-name&gt;<br />
&lt;param-value&gt;https://sso.gzps.net:8443/cas/serviceValidate&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;edu.yale.its.tp.cas.client.filter.serverName&lt;/param-name&gt;<br />
&lt;param-value&gt;88.148.29.54:8080&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;CAS Filter&lt;/filter-name&gt;<br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;	<br />
<br />
</pre>
<br />
<span style="color: red;">
<a href="http://lib.javaeye.com/blog/165196#comments" style="color: red;">本文的讨论也很精彩，浏览讨论&gt;&gt;</a>
</span>
<br />
<br />
<br />
<span style="color: #e28822;">JavaEye推荐</span>
<br />
<a href="/adverts/41" target="_blank"><span style="color: red; font-weight: bold;">中国领先的电子商务网站－淘宝网招贤纳士，诚聘Java工程师</span></a>
<br />
<br />
<br />
<br />
文章来源:<a href="http://lib.javaeye.com/blog/165196">http://lib.javaeye.com/blog/165196</a> 
<img src ="http://www.blogjava.net/jacally/aggbug/186660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2008-02-26 16:35 <a href="http://www.blogjava.net/jacally/articles/186660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse 插件集合</title><link>http://www.blogjava.net/jacally/articles/127889.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Tue, 03 Jul 2007 08:43:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/127889.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/127889.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/127889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/127889.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/127889.html</trackback:ping><description><![CDATA[JSBuilder:<br><strong>http://download.macromedia.com/pub/labs/jseclipse/autoinstall/</strong>&nbsp;<br>xfire:<br>&nbsp;<a href="http://dist.codehaus.org/xfire/update/">ttp://dist.codehaus.org/xfire/update/</a><br>m2eclipse:<br><a href="http://m2eclipse.codehaus.org/">http://m2eclipse.codehaus.org/</a>
<img src ="http://www.blogjava.net/jacally/aggbug/127889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2007-07-03 16:43 <a href="http://www.blogjava.net/jacally/articles/127889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>改变已经打开的窗口样式(摘)</title><link>http://www.blogjava.net/jacally/articles/124345.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Thu, 14 Jun 2007 08:45:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/124345.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/124345.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/124345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/124345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/124345.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_69_487_Open_Image onclick="this.style.display='none'; Codehighlighter1_69_487_Open_Text.style.display='none'; Codehighlighter1_69_487_Closed_Image.style.display='inline'; Codehighlighter1_69_487_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_69_487_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_69_487_Closed_Text.style.display='none'; Codehighlighter1_69_487_Open_Image.style.display='inline'; Codehighlighter1_69_487_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top>function&nbsp;init()</span><span id=Codehighlighter1_69_487_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_69_487_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">window.resizeTo(700,500);&nbsp;&nbsp;</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;top</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,left</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(window.name&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myWin</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;<br><img id=Codehighlighter1_159_481_Open_Image onclick="this.style.display='none'; Codehighlighter1_159_481_Open_Text.style.display='none'; Codehighlighter1_159_481_Closed_Image.style.display='inline'; Codehighlighter1_159_481_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_159_481_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_159_481_Closed_Text.style.display='none'; Codehighlighter1_159_481_Open_Image.style.display='inline'; Codehighlighter1_159_481_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;</span><span id=Codehighlighter1_159_481_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_159_481_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">top&nbsp;=&nbsp;window.screenTop;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">left&nbsp;=&nbsp;window.screenLeft;</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;var&nbsp;&nbsp;&nbsp;oSon&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;window.open(window.location,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myWin</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">width=700,height=500</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;window.open(window.location,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">myWin</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">big</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">fullscreen=yes</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;oSon.window.moveTo(top,&nbsp;&nbsp;&nbsp;left);&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;window.opener&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;window.close();&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;oSon.focus();&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<img src ="http://www.blogjava.net/jacally/aggbug/124345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2007-06-14 16:45 <a href="http://www.blogjava.net/jacally/articles/124345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>打开和一个图象大小的窗口，随图象大小任意变化(抄)</title><link>http://www.blogjava.net/jacally/articles/124340.html</link><dc:creator>Lib</dc:creator><author>Lib</author><pubDate>Thu, 14 Jun 2007 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/jacally/articles/124340.html</guid><wfw:comment>http://www.blogjava.net/jacally/comments/124340.html</wfw:comment><comments>http://www.blogjava.net/jacally/articles/124340.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacally/comments/commentRss/124340.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacally/services/trackbacks/124340.html</trackback:ping><description><![CDATA[这里有一个例子，是打开和一个图象大小的窗口，随图象大小任意变化，你可以相似发挥。要看更多的请到 &nbsp; http://elove.heha.net &nbsp; <br>&nbsp; &nbsp; <br>&nbsp; &lt;SCRIPT &nbsp; LANGUAGE="JavaScript"&gt; &nbsp; <br>&nbsp; var &nbsp; isNav4, &nbsp; isIE4; &nbsp; <br>&nbsp; if &nbsp; (parseInt(navigator.appVersion.charAt(0)) &nbsp; &gt;= &nbsp; 4) &nbsp; { &nbsp; <br>&nbsp; isNav4 &nbsp; = &nbsp; (navigator.appName &nbsp; == &nbsp; "Netscape") &nbsp; ? &nbsp; 1 &nbsp; : &nbsp; 0; &nbsp; <br>&nbsp; isIE4 &nbsp; = &nbsp; (navigator.appName.indexOf("Microsoft") &nbsp; != &nbsp; -1) &nbsp; ? &nbsp; 1 &nbsp; : &nbsp; 0; &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; function &nbsp; fitWindowSize() &nbsp; { &nbsp; <br>&nbsp; if &nbsp; (isNav4) &nbsp; { &nbsp; <br>&nbsp; window.innerWidth &nbsp; = &nbsp; document.layers[0].document.images[0].width; &nbsp; <br>&nbsp; window.innerHeight &nbsp; = &nbsp; document.layers[0].document.images[0].height; &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; if &nbsp; (isIE4) &nbsp; { &nbsp; <br>&nbsp; window.resizeTo(500, &nbsp; 500); &nbsp; <br>&nbsp; width &nbsp; = &nbsp; 500 &nbsp; - &nbsp; (document.body.clientWidth &nbsp; - &nbsp; &nbsp; document.images[0].width); &nbsp; <br>&nbsp; height &nbsp; = &nbsp; 500 &nbsp; - &nbsp; (document.body.clientHeight &nbsp; - &nbsp; &nbsp; document.images[0].height); &nbsp; <br>&nbsp; window.resizeTo(width, &nbsp; height); &nbsp; <br>&nbsp; &nbsp; &nbsp; &nbsp; } &nbsp; <br>&nbsp; } &nbsp; <br>&nbsp; &lt;/script&gt;
<img src ="http://www.blogjava.net/jacally/aggbug/124340.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacally/" target="_blank">Lib</a> 2007-06-14 16:26 <a href="http://www.blogjava.net/jacally/articles/124340.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>