??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧洲闷骚av少妇影院,久久视频精品在线,久久精品国产秦先生http://www.aygfsteel.com/jacally/Java原生?/description>zh-cnMon, 16 Jun 2025 21:59:35 GMTMon, 16 Jun 2025 21:59:35 GMT60WebService开发笔?3 -- 增加WebService讉K的安全?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/jacally/archive/2008/03/19/187161.html</guid><wfw:comment>http://www.aygfsteel.com/jacally/comments/187161.html</wfw:comment><comments>http://www.aygfsteel.com/jacally/archive/2008/03/19/187161.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jacally/comments/commentRss/187161.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jacally/services/trackbacks/187161.html</trackback:ping><description><![CDATA[<br /> ?a href="http://www.aygfsteel.com/jacally/articles/186655.html">WebService开发笔?1</a>中我们创Z一个WebService单实?下面我们通过一个简单的用户口o验证机制来加Z下WebService的安全? <br /> <br /> 1.修改WebService 服务?spring 配置文g ws-context.xml <br /> <pre class="xml" name="code"><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 >http://cxf.apache.org/schemas/jaxws.xsd</a> <br /> <a >http://www.springframework.org/schema/beans</a> <br /> http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName" default-lazy-init="true"> <jaxws:endpoint id="webServiceSample" address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"> <jaxws:inInterceptors> <bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /> <bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"> <constructor-arg> <map> <entry key="action" value="UsernameToken" /> <entry key="passwordType" value="PasswordText" /> <entry key="passwordCallbackClass" value="cn.org.coral.biz.examples.webservice.handler.WsAuthHandler" /> </map> </constructor-arg> </bean> </jaxws:inInterceptors> </jaxws:endpoint> </beans> </pre> <br /> <br /> 2.服务端添加passwordCallbackClass回调c?该类q行用户口o验证: <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 配置文g wsclient-context.xml 如下: <br /> <pre class="xml" name="code"><?xml version="1.0" encoding="UTF-8"?> <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 >http://cxf.apache.org/schemas/jaxws.xsd</a> <br /> <a >http://www.springframework.org/schema/beans</a> <br /> http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName" default-lazy-init="true"> <!-- ws clinet --> <bean id="webServiceSampleClient" class="cn.org.coral.biz.examples.webservice.WebServiceSample" factory-bean="webServiceSampleClientFactory" factory-method="create" /> <bean id="webServiceSampleClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="cn.org.coral.biz.examples.webservice.WebServiceSample" /> <property name="address" value="http://88.148.29.54:8080/aio/services/WebServiceSample" /> <property name="outInterceptors"> <list> <bean class="org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor" /> <ref bean="wss4jOutConfiguration" /> </list> </property> </bean> <bean id="wss4jOutConfiguration" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor"> <property name="properties"> <map> <entry key="action" value="UsernameToken" /> <entry key="user" value="ws-client" /> <entry key="passwordType" value="PasswordText" /> <entry> <key> <value>passwordCallbackRef</value> </key> <ref bean="passwordCallback" /> </entry> </map> </property> </bean> <bean id="passwordCallback" class="cn.org.coral.biz.examples.webservice.handler.WsClinetAuthHandler"> </bean> </beans> </pre> <br /> <br /> 4.客户端添加passwordCallbackc?通过该类讄讉K口o <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 < 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单元试E序: <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.aygfsteel.com/jacally/aggbug/187161.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jacally/" target="_blank">Lib</a> 2008-03-19 10:10 <a href="http://www.aygfsteel.com/jacally/archive/2008/03/19/187161.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]WebService开发笔?2 -- VS 2005 讉KWebServcie更简?/title><link>http://www.aygfsteel.com/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.aygfsteel.com/jacally/articles/186656.html</guid><wfw:comment>http://www.aygfsteel.com/jacally/comments/186656.html</wfw:comment><comments>http://www.aygfsteel.com/jacally/articles/186656.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jacally/comments/commentRss/186656.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jacally/services/trackbacks/186656.html</trackback:ping><description><![CDATA[<br /> |站: <a >JavaEye</a>  作? <a >jacally</a>  链接Q?a style="color: red" >http://lib.javaeye.com/blog/170628</a>  发表旉: 2008q?3?2?<br /> <br /> 声明Q本文系JavaEye|站发布的原创博客文章,未经作者书面许可,严禁M|站转蝲本文Q否则必追I法律责任! <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.dweb引用.... <br /> <img alt="" src="http://lib.javaeye.com/upload/picture/pic/9220/e5e21986-a77f-3918-8b12-8290e62456a1.jpg?1205321362" /> <br /> <br /> 3.输入WebService地址Qhttp://88.148.29.54:8080/aio/services/WebServiceSample?wsdl最后点?#8220;d引用” <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.~写按钮事g代码 <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 < 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.最后点击调试运行,或按F5q行Q通过点击按钮可以看到调用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" >本文的讨Z很精彩,览讨论>></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 >http://lib.javaeye.com/blog/170628</a> <img src ="http://www.aygfsteel.com/jacally/aggbug/186656.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jacally/" target="_blank">Lib</a> 2008-03-16 21:41 <a href="http://www.aygfsteel.com/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.aygfsteel.com/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.aygfsteel.com/jacally/articles/186655.html</guid><wfw:comment>http://www.aygfsteel.com/jacally/comments/186655.html</wfw:comment><comments>http://www.aygfsteel.com/jacally/articles/186655.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jacally/comments/commentRss/186655.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jacally/services/trackbacks/186655.html</trackback:ping><description><![CDATA[现在的项目中需要用到SOA概念的地方越来越?最q我接手的一个项目中提Zq样的业务要?需要在.net开发的客户端系l中讉Kjava开发的webpȝ,q样的业务需求自焉要通过WebServiceq行信息数据的操作。下面就我们在开发中摸烦的一点经验教训ȝ以下Q以供大家参? <br /> <br /> 我们目的整个架构用的比较行的WSH MVCl合,即webwork2 + Spring + Hibernate; <br /> 1.首先集成Apacha CXF WebService ?Spring 框架? <br /> apache cxf 下蝲地址:<a target="_blank">http://people.apache.org/dist/incubator/cxf/2.0.4-incubator/apache-cxf-2.0.4-incubator.zip</a> <br /> 在spring context配置文g中引入以下cxf配置 <br /> <pre class="xml" name="code"> <import resource="classpath*:META-INF/cxf/cxf.xml" /><br /> <import resource="classpath*:META-INF/cxf/cxf-extension-soap.xml" /><br /> <import resource="classpath*:META-INF/cxf/cxf-servlet.xml" /><br /> </pre> <br /> 在web.xml中添加过滤器: <br /> <pre class="xml" name="code"> <servlet><br /> <servlet-name>CXFServlet</servlet-name><br /> <servlet-class><br /> org.apache.cxf.transport.servlet.CXFServlet<br /> </servlet-class><br /> </servlet><br /> <servlet-mapping><br /> <servlet-name>CXFServlet</servlet-name><br /> <url-pattern>/services/*</url-pattern><br /> </servlet-mapping><br /> </pre> <br /> <br /> 2.开发服务端WebService接口: <br /> <pre class="java" name="code">/**<br /> * WebService接口定义c?<br /> * <br /> * 使用@WebService接口中的所有方法输ZؓWeb Service.<br /> * 可用annotation对设|方法、参数和q回值在WSDL中的定义.<br /> */<br /> @WebService<br /> public interface WebServiceSample {<br /> <br /> <br /> /**<br /> * 一个简单的Ҏ,q回一个字W串<br /> * @param hello<br /> * @return<br /> */<br /> String say(String hello);<br /> <br /> /**<br /> * E微复杂一些的Ҏ,传递一个对象给服务端处?br /> * @param user<br /> * @return<br /> */<br /> String sayUserName(<br /> @WebParam(name = "user") <br /> UserDTO user);<br /> <br /> /**<br /> * 最复杂的方?q回一个List装的对象集?br /> * @return<br /> */<br /> public <br /> @WebResult(partName="o")<br /> ListObject findUsers();<br /> <br /> }<br /> </pre> <br /> q单到复杂定义了三个接?模拟业务需? <br /> <br /> 3.实现接口 <br /> <pre class="java" name="code">/**<br /> * WebService实现c?<br /> * <br /> * 使用@WebService指向Interface定义cd?<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<Object> list = new ArrayList<Object>();<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 /> * 分离entitycMweb service接口间的耦合Q隔lentitycȝ修改Ҏ口的影响.<br /> * 使用JAXB 2.0的annotation标注JAVA-XML映射Q尽量用默认约?<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 target="_blank">有关JWS的一个问?/a>中的描述:DK6.0 自带的WebService?WebMethod的参数好像不能是ArrayList 或者其他List <br /> 传递List需要将List 包装在其他对象内部才?(个h理解 如有不对h? ,我在实践中也遇到了此c问?通过以下装的对象即可以传递List对象. <br /> <pre class="java" name="code">/**<br /> * <p>Java class for listObject complex type.<br /> * <br /> * <p>The following schema fragment specifies the expected content contained within this class.<br /> * <br /> * <pre><br /> * <complexType name="listObject"><br /> * <complexContent><br /> * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"><br /> * <sequence><br /> * <element name="list" type="{http://www.w3.org/2001/XMLSchema}anyType" maxOccurs="unbounded" minOccurs="0"/><br /> * </sequence><br /> * </restriction><br /> * </complexContent><br /> * </complexType><br /> * </pre><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<Object> list;<br /> <br /> /**<br /> * Gets the value of the list property.<br /> * <br /> * <p><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 <CODE>set</CODE> method for the list property.<br /> * <br /> * <p><br /> * For example, to add a new item, do as follows:<br /> * <pre><br /> * getList().add(newItem);<br /> * </pre><br /> * <br /> * <br /> * <p><br /> * Objects of the following type(s) are allowed in the list<br /> * {@link Object }<br /> * <br /> * <br /> */<br /> public List<Object> getList() {<br /> if (list == null) {<br /> list = new ArrayList<Object>();<br /> }<br /> return this.list;<br /> }<br /> <br /> public void setList(ArrayList<Object> list) {<br /> this.list = list;<br /> }<br /> <br /> }<br /> </pre> <br /> <br /> 5.WebService 服务?spring 配置文g ws-context.xml <br /> <pre class="xml" name="code"><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 >http://cxf.apache.org/schemas/jaxws.xsd</a> <br /> <a >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"><br /> <br /> <jaxws:endpoint id="webServiceSample"<br /> address="/WebServiceSample" implementor="cn.org.coral.biz.examples.webservice.WebServiceSampleImpl"/><br /> <br /> </beans><br /> </pre> <br /> <br /> WebService 客户?spring 配置文g wsclient-context.xml <br /> <pre class="xml" name="code"><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 >http://cxf.apache.org/schemas/jaxws.xsd</a> <br /> <a >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"><br /> <br /> <!-- ws client --><br /> <bean id="identityValidateServiceClient" class="cn.org.coral.admin.service.IdentityValidateService"<br /> factory-bean="identityValidateServiceClientFactory" factory-method="create" /><br /> <br /> <bean id="identityValidateServiceClientFactory"<br /> class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"><br /> <property name="serviceClass"<br /> value="cn.org.coral.admin.service.IdentityValidateService" /><br /> <property name="address"<br /> value="http://88.148.29.54:8080/coral/services/IdentityValidateService"/><br /> </bean><br /> <br /> </beans><br /> </pre> <br /> 6.发布到tomcat服务器以后通过以下地址卛_查看自定义的webservice接口生成的wsdl: <br /> http://88.148.29.54:8080/aio/services/WebServiceSample?wsdl <br /> <br /> 7.调用WebService接口的Junit单元试E序 <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.aygfsteel.com/jacally/aggbug/186655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jacally/" target="_blank">Lib</a> 2008-03-16 21:40 <a href="http://www.aygfsteel.com/jacally/articles/186655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[导入]CAS 单点d安装W记4 -- asp.net client端的讄http://www.aygfsteel.com/jacally/articles/186657.htmlLibLibSun, 02 Mar 2008 03:52:00 GMThttp://www.aygfsteel.com/jacally/articles/186657.htmlhttp://www.aygfsteel.com/jacally/comments/186657.htmlhttp://www.aygfsteel.com/jacally/articles/186657.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/186657.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/186657.html |站: JavaEye  作? jacally  链接Q?a style="color: red;">http://lib.javaeye.com/blog/166619  发表旉: 2008q?3?2?

声明Q本文系JavaEye|站发布的原创博客文章,未经作者书面许可,严禁M|站转蝲本文Q否则必追I法律责任!

CAS 单点d安装W记4
--- asp.net client端的讄

1、首先修改web.Config文gQ加入以下设|:
<authentication mode="Forms" >
<forms name="casauth" loginUrl="login.aspx" />
</authentication>
<authorization>
<deny users="?" />
</authorization>

本h?net不是很熟悉,感觉q里的配|类似java web应用E序中的qo器,当用戯问web|首先跌{到login.aspx面q行验证?

2、加入以下c#代码到login.aspx面的加载事件中Q?
    //CAS w䆾验证 服务器地址
private const string CASHOST = "https://sso.gzps.net:8443/cas/";

protected void Page_Load(object sender, EventArgs e)
{
System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();

// Look for the "ticket=" after the "?" in the URL
string tkt = Request.QueryString["ticket"];

// This page is the CAS service=, but discard any query string residue
string service = Request.Url.GetLeftPart(UriPartial.Path);

// First time through there is no ticket=, so redirect to CAS login
if (tkt == null || tkt.Length == 0)
{
string redir = CASHOST + "login?" +
"service=" + service;
Response.Redirect(redir);
return;
}

// Second time (back from CAS) there is a ticket= to validate
string validateurl = CASHOST + "serviceValidate?" +
"ticket=" + tkt + "&"+
"service=" + service;
StreamReader Reader = new StreamReader( new WebClient().OpenRead(validateurl));
string resp = Reader.ReadToEnd();
// I like to have the text in memory for debugging rather than parsing the stream

// Some boilerplate to set up the parse.
NameTable nt = new NameTable();
XmlNamespaceManager nsmgr = new XmlNamespaceManager(nt);
XmlParserContext context = new XmlParserContext(null, nsmgr, null, XmlSpace.None);
XmlTextReader reader = new XmlTextReader(resp, XmlNodeType.Element, context);

string netid = null;

// A very dumb use of XML. Just scan for the "user". If it isn't there, its an error.
while (reader.Read())
{
if (reader.IsStartElement()) {
string tag = reader.LocalName;
if (tag=="user")
netid = reader.ReadString();
}
}
// if you want to parse the proxy chain, just add the logic above
reader.Close();
// If there was a problem, leave the message on the screen. Otherwise, return to original page.
if (netid == null)
{
Label1.Text = "CAS returned to this application, but then refused to validate your identity.";
}
else
{
Session["UserName"] = netid;
Label1.Text = "Welcome " + netid;
FormsAuthentication.RedirectFromLoginPage(netid, false); // set netid in ASP.NET blocks
}

}
}


以上代码参照了ja-sig|站的解x案:http://www.ja-sig.org/wiki/display/CASC/ASP.NET+Forms+Authentication

3、以样就可以了,q行时可以蟩到sso服务器进行验证,但蟩转以后报以下错误Q?
" System.Net.WebException?基础q接已关闭?无法建立与远E服务器信Q关系 "?
应该与CAS Server端安装了数字证书Q?net Client端ƈ没有安装相应的证书有兟?
可以通过配置IIS服务器,支持HTTPS SSL协议实现安全数据交换中介l的步骤导入CAS 服务端的数字证书,或者通过http://support.microsoft.com/kb/823177/上介l的解决Ҏq行处理Q?
实现c?
using System.Net;
using System.Security.Cryptography.X509Certificates;

public class MyPolicy : ICertificatePolicy {
public bool CheckValidationResult(
ServicePoint srvPoint
, X509Certificate certificate
, WebRequest request
, int certificateProblem) {

//Return True to force the certificate to be accepted.
return true;

} // end CheckValidationResult
} // class MyPolicy


客户端代码中包含下列代码Q?
   System.Net.ServicePointManager.CertificatePolicy = new MyPolicy();


所有代码见附gWebSite.rar,其部vC的IIS服务器就可以了?
关于IIS服务器的讄?a target="_blank">asp.net一夜速成教程
本文的讨Z很精彩,览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝|招贤纳士,诚聘Java工程?/span>



文章来源:http://lib.javaeye.com/blog/166619

Lib 2008-03-02 11:52 发表评论
]]>
[导入]CAS 单点d安装W记3 -- 与acegi集成http://www.aygfsteel.com/jacally/articles/186658.htmlLibLibThu, 28 Feb 2008 15:39:00 GMThttp://www.aygfsteel.com/jacally/articles/186658.htmlhttp://www.aygfsteel.com/jacally/comments/186658.htmlhttp://www.aygfsteel.com/jacally/articles/186658.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/186658.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/186658.html |站: JavaEye  作? jacally  链接Q?a style="color: red;">http://lib.javaeye.com/blog/165980  发表旉: 2008q?2?8?

声明Q本文系JavaEye|站发布的原创博客文章,未经作者书面许可,严禁M|站转蝲本文Q否则必追I法律责任!

CAS 单点d安装W记3
-- 与acegi集成

在我的项目中应用了acigi安全框架,以下是结合yale cas单点dpȝq行的相关配|?
<!-- =========  Acegi as a CAS Client的配|?============ -->
<bean id="authenticationProcessingFilter"
class="org.acegisecurity.ui.cas.CasProcessingFilter">
<property name="authenticationManager"
ref="authenticationManager" />
<property name="authenticationFailureUrl"
value="/login.do?login_error=1" />
<property name="defaultTargetUrl" value="/main.do" />
<property name="filterProcessesUrl">
<value>/j_acegi_cas_security_check</value>
</property>
<property name="rememberMeServices" ref="rememberMeServices" />
<property name="exceptionMappings">
<value>
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
</value>
</property>
</bean>
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
<property name="authenticationEntryPoint">
<ref local="casProcessingFilterEntryPoint"/>
</property>
<property name="accessDeniedHandler">
<bean
class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
<property name="errorPage"
value="/errors/accessDenied.jsp" />
</bean>
</property>
</bean>
<!-- cas config -->
<bean id="casProcessingFilterEntryPoint" class="org.acegisecurity.ui.cas.CasProcessingFilterEntryPoint">
<property name="loginUrl"><value>https://sso.gzps.net:8443/cas/login</value></property>
<property name="serviceProperties"><ref local="serviceProperties"/></property>
</bean>
<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
<property name="providers">
<list>
<ref local="casAuthenticationProvider"/>
</list>
</property>
</bean>
<bean id="casAuthenticationProvider" class="org.acegisecurity.providers.cas.CasAuthenticationProvider">
<property name="casAuthoritiesPopulator"><ref bean="casAuthoritiesPopulator"/></property>
<property name="casProxyDecider"><ref local="casProxyDecider"/></property>
<property name="ticketValidator"><ref local="casProxyTicketValidator"/></property>
<property name="statelessTicketCache"><ref local="statelessTicketCache"/></property>
<property name="key"><value>my_password_for_this_auth_provider_only</value></property>
</bean>
<bean id="casProxyTicketValidator" class="org.acegisecurity.providers.cas.ticketvalidator.CasProxyTicketValidator">
<property name="casValidate"><value>https://sso.gzps.net:8443/cas/proxyValidate</value></property>
<property name="serviceProperties"><ref local="serviceProperties"/></property>
</bean>
<!--
<bean id="casProxyDecider" class="org.acegisecurity.providers.cas.proxy.AcceptAnyCasProxy" />
-->
<bean id="casProxyDecider" class="org.acegisecurity.providers.cas.proxy.RejectProxyTickets" />
<bean id="serviceProperties" class="org.acegisecurity.ui.cas.ServiceProperties">
<property name="service">
<value>http://localhost:8080/aio/j_acegi_cas_security_check</value>
</property>
<property name="sendRenew">
<value>false</value>
</property>
</bean>
<bean id="statelessTicketCache" class="org.acegisecurity.providers.cas.cache.EhCacheBasedTicketCache">
<property name="cache">
<bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager">
<bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"/>
</property>
<property name="cacheName" value="userCache"/>
</bean>
</property>
</bean>
<bean id="casAuthoritiesPopulator" class="org.acegisecurity.providers.cas.populator.DaoCasAuthoritiesPopulator">
<property name="userDetailsService"><ref local="userDetailsService"/></property>
</bean>

<bean id="casProcessingFilter" class="org.acegisecurity.ui.cas.CasProcessingFilter">
<property name="authenticationManager"><ref local="authenticationManager"/></property>
<property name="authenticationFailureUrl"><value>/casfailed.jsp</value></property>
<property name="defaultTargetUrl"><value>/</value></property>
<property name="filterProcessesUrl"><value>/j_acegi_cas_security_check</value></property>
</bean>


<!-- ======================================================= -->


本文的讨Z很精彩,览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝|招贤纳士,诚聘Java工程?/span>



文章来源:http://lib.javaeye.com/blog/165980

Lib 2008-02-28 23:39 发表评论
]]>
[导入]CAS 单点d安装W记2 -- 配置CAS,讉K自己的用戯http://www.aygfsteel.com/jacally/articles/186659.htmlLibLibWed, 27 Feb 2008 09:46:00 GMThttp://www.aygfsteel.com/jacally/articles/186659.htmlhttp://www.aygfsteel.com/jacally/comments/186659.htmlhttp://www.aygfsteel.com/jacally/articles/186659.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/186659.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/186659.html |站: JavaEye  作? jacally  链接Q?a style="color: red;">http://lib.javaeye.com/blog/165538  发表旉: 2008q?2?7?

声明Q本文系JavaEye|站发布的原创博客文章,未经作者书面许可,严禁M|站转蝲本文Q否则必追I法律责任!

CAS 单点d安装W记2


1.修改cas/webapp/WEB-INF/deployerConfigContext.xml
加入以下定义:
	<!-- 数据源定?-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driver}" />
<property name="url" value="${db.url}" />
<property name="username" value="${db.username}" />
<property name="password" value="${db.password}" />
</bean>
<!--
passwordEncoder 使用Md5法加密
-->
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="MD5"/>
</bean>


2.屏蔽原有验证Ҏ:
				<!-- 
<bean
class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
-->


3.加入通过讉K数据库进行验证的handler:
				<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="sql" value="select password from CORE_USERS where logid=?" />
<property name="passwordEncoder" ref="passwordEncoder"/>
<property name="dataSource" ref="dataSource" />
</bean>


4.修改cas\webapp\WEB-INF\cas.properties,定义数据库连接资?本例子是q接的oracle数据?
db.driver=oracle.jdbc.driver.OracleDriver
db.url=jdbc\:oracle\:thin\:@192.168.1.1\:1521\:xxxx
db.username=xxxx
db.password=xxxx


5.增加相关jar包到cas\webapp\WEB-INF\lib\目录?
cas-server-support-jdbc-3.2.jar (casq接数据库的支持?
ojdbc14.jar (q接oracle数据的jdbc驱动E序)
本文的讨Z很精彩,览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝|招贤纳士,诚聘Java工程?/span>



文章来源:http://lib.javaeye.com/blog/165538

Lib 2008-02-27 17:46 发表评论
]]>
[导入]CAS 单点d安装W记1 -- 基本讄与数字证书的安装http://www.aygfsteel.com/jacally/articles/186660.htmlLibLibTue, 26 Feb 2008 08:35:00 GMThttp://www.aygfsteel.com/jacally/articles/186660.htmlhttp://www.aygfsteel.com/jacally/comments/186660.htmlhttp://www.aygfsteel.com/jacally/articles/186660.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/186660.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/186660.html |站: JavaEye  作? jacally  链接Q?a style="color: red;">http://lib.javaeye.com/blog/165196  发表旉: 2008q?2?6?

声明Q本文系JavaEye|站发布的原创博客文章,未经作者书面许可,严禁M|站转蝲本文Q否则必追I法律责任!

安装JA-SIG SSOpȝW记1

(关于配置讉K数据库的用户表见安装JA-SIG SSOpȝW记2)
(与acegil合配置?a target="_blank">安装JA-SIG SSOpȝW记3)
(ASP.NET client端的讄?a target="_blank">安装JA-SIG SSOpȝW记4)

ps:配置中的文g路径Ҏ自己的实际情늚讑֮

1.安装JA-SIG ?TOMCAT;
JA-SIG下蝲地址:
http://www.ja-sig.org/products/cas/downloads/index.html

2.生成数字证书,见批处理文g"cas 生成数字证书.bat";

3.配置Tomcat的HTTPS服务,修改server.xml
		<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="C:/Documents and Settings/Administrator/.keystore" keystorePass="changeit"
truststoreFile="D:/Java/jdk1.6.0_02/jre/lib/security/cacerts"
clientAuth="false" sslProtocol="TLS"/>


4.导出 SERVER 的证书,用来l所有需要用到的客户端导??导出 cas 数字证书.bat"

5.在客L?JVM 里导入信ȝ SERVER 的证?( Ҏ情况有可能需要管理员权限 ),?导入 cas 证书.bat"Q?

5.修改客户端服务程?加入casqo?修改web.xml
	<!-- CAS -->
<filter>
<filter-name>CAS Filter</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://sso.gzps.net:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://sso.gzps.net:8443/cas/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>88.148.29.54:8080</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


本文的讨Z很精彩,览讨论>>


JavaEye推荐
中国领先的电子商务网站-淘宝|招贤纳士,诚聘Java工程?/span>



文章来源:http://lib.javaeye.com/blog/165196

Lib 2008-02-26 16:35 发表评论
]]>
Eclipse 插g集合http://www.aygfsteel.com/jacally/articles/127889.htmlLibLibTue, 03 Jul 2007 08:43:00 GMThttp://www.aygfsteel.com/jacally/articles/127889.htmlhttp://www.aygfsteel.com/jacally/comments/127889.htmlhttp://www.aygfsteel.com/jacally/articles/127889.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/127889.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/127889.htmlhttp://download.macromedia.com/pub/labs/jseclipse/autoinstall/ 
xfire:
 ttp://dist.codehaus.org/xfire/update/
m2eclipse:
http://m2eclipse.codehaus.org/

Lib 2007-07-03 16:43 发表评论
]]>
改变已经打开的窗口样??http://www.aygfsteel.com/jacally/articles/124345.htmlLibLibThu, 14 Jun 2007 08:45:00 GMThttp://www.aygfsteel.com/jacally/articles/124345.htmlhttp://www.aygfsteel.com/jacally/comments/124345.htmlhttp://www.aygfsteel.com/jacally/articles/124345.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/124345.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/124345.html<script language="JavaScript" type="text/JavaScript">
function init()
{
    
//window.resizeTo(700,500);  
    var top=0,left=0;
  
if(window.name   !=   "myWin")   
  
{   
    
//top = window.screenTop;
    
//left = window.screenLeft;
  var   oSon   =   window.open(window.location,"myWin","width=700,height=500");   
  window.open(window.location,
"myWin",   'big',   'fullscreen=yes');   
  oSon.window.moveTo(top,   left);   
  window.opener   
=   "";   
  window.close(); 
  oSon.focus();  
  }
       
}

</script>

Lib 2007-06-14 16:45 发表评论
]]>
打开和一个图象大的H口Q随图象大小L变化(?http://www.aygfsteel.com/jacally/articles/124340.htmlLibLibThu, 14 Jun 2007 08:26:00 GMThttp://www.aygfsteel.com/jacally/articles/124340.htmlhttp://www.aygfsteel.com/jacally/comments/124340.htmlhttp://www.aygfsteel.com/jacally/articles/124340.html#Feedback0http://www.aygfsteel.com/jacally/comments/commentRss/124340.htmlhttp://www.aygfsteel.com/jacally/services/trackbacks/124340.html   
  <SCRIPT   LANGUAGE="JavaScript">  
  var   isNav4,   isIE4;  
  if   (parseInt(navigator.appVersion.charAt(0))   >=   4)   {  
  isNav4   =   (navigator.appName   ==   "Netscape")   ?   1   :   0;  
  isIE4   =   (navigator.appName.indexOf("Microsoft")   !=   -1)   ?   1   :   0;  
  }  
  function   fitWindowSize()   {  
  if   (isNav4)   {  
  window.innerWidth   =   document.layers[0].document.images[0].width;  
  window.innerHeight   =   document.layers[0].document.images[0].height;  
  }  
  if   (isIE4)   {  
  window.resizeTo(500,   500);  
  width   =   500   -   (document.body.clientWidth   -     document.images[0].width);  
  height   =   500   -   (document.body.clientHeight   -     document.images[0].height);  
  window.resizeTo(width,   height);  
        }  
  }  
  </script>

Lib 2007-06-14 16:26 发表评论
]]>
վ֩ģ壺 ǫ| | | | ɰ| | | | | ͷ| ó| ƽ| ƽ| | ̨| ʩ| Զ| մ| | | Ϫ| ͨ| Զ| ƽ| | | | | | | ŷ| | կ| ͷ| տ| | ϲ| ۽| | ֯| Ȫ|