??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久蜜臀国产一区二区,精品伊人久久久,日本啊v在线http://www.aygfsteel.com/Noah/category/37836.html<span style="font-family: 宋体; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri" lang="ZH-CN">不是l典我不?lt;/span>zh-cnMon, 20 Feb 2012 18:58:24 GMTMon, 20 Feb 2012 18:58:24 GMT60两个portlet之间跌{q传?/title><link>http://www.aygfsteel.com/Noah/articles/362185.html</link><dc:creator>眼镜?/dc:creator><author>眼镜?/author><pubDate>Thu, 27 Oct 2011 10:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/Noah/articles/362185.html</guid><wfw:comment>http://www.aygfsteel.com/Noah/comments/362185.html</wfw:comment><comments>http://www.aygfsteel.com/Noah/articles/362185.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Noah/comments/commentRss/362185.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Noah/services/trackbacks/362185.html</trackback:ping><description><![CDATA[     摘要: 在不同的Portlet之间传参敎ͼq想q是所有用Liferay的h都想实现的,但在以前的版本中实做不到。现在的版本可以?jin),q且很简?  首先Q打开portlet.xml文gQ找C惛_C值和接收值的portlet片段Q在每个片段中加上下面这行代码:(x) <supported-public-render-parameter>参数?lt;/supported-publi...  <a href='http://www.aygfsteel.com/Noah/articles/362185.html'>阅读全文</a><img src ="http://www.aygfsteel.com/Noah/aggbug/362185.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Noah/" target="_blank">眼镜?/a> 2011-10-27 18:36 <a href="http://www.aygfsteel.com/Noah/articles/362185.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Connect to second database in Liferay(q接W二个数据库)http://www.aygfsteel.com/Noah/articles/362178.html眼镜?/dc:creator>眼镜?/author>Thu, 27 Oct 2011 09:56:00 GMThttp://www.aygfsteel.com/Noah/articles/362178.htmlhttp://www.aygfsteel.com/Noah/comments/362178.htmlhttp://www.aygfsteel.com/Noah/articles/362178.html#Feedback0http://www.aygfsteel.com/Noah/comments/commentRss/362178.htmlhttp://www.aygfsteel.com/Noah/services/trackbacks/362178.html同时q接两个数据库,q接多个数据?/font>

q是我自qI出来的Q真的可以说是世界首发了(jin)Q网上也有一些例子,都要么就是老版本,要么q复杂。我的这个方法特单,希望对大家有用,也希望大家珍?/font>

因ؓ(f)公司的需要,直接写的英文版的Q不惛_译回来?jin)。都不难理解Q一看就能明白。不懂的L(fng)a

Introduction

                First of all, I should say that setting liferay to connect to another database is very easy. Certainty, all of things to make easy always after numerous attempts . I searched several solutions from website before. But, not only for old version but also too complex.  As my understand  According to original source, and several trial. I found the way. And I think that it is the World Premiere.^_^

 

Prerequisites

You should know how to create services with Service Builder, Also You should know how to create new portlet. how to link to database and  how it is used inside programming language code.

The steps described here were performed over Liferay 6.0.6.

 

 

Let us Beginning

1.       Create a file named portal-ext.properties in {WEBSERVER-HOME}\webapps\ROOT\WEB-INF\classes. And type the following code:

    #
    # MySQL
    #
    jdbc.default.driverClassName
=com.mysql.jdbc.Driver
    jdbc.default.url
=jdbc:mysql://localhost/lfportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
    jdbc.default.username
=root
    jdbc.default.password
=root  
  
    #
    # This is the second connection
    #
    jdbc.second.driverClassName
=net.sourceforge.jtds.jdbc.Driver
    jdbc.second.url
=jdbc:jtds:sqlserver://localhost:1433/extraDB
    jdbc.second.username
=sa
    jdbc.second.password
=test

 

2.       Create a service.xml file. And type the following code:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 6.0.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_6_0_0.dtd">
<service-builder package-path="com.test">
    
<author>noah.xiang</author>
    
<namespace>nx</namespace>

    
<entity name="MyTable" local-service="true" remote-service="false" table="myTable" data-source="secondDataSource" session-factory="secondSessionFactory" tx-manager="secondTransactionManager">
        
<!-- PK fields -->

        
<column name="id" type="int" primary="true" />

        
<!-- Audit fields -->

        
<column name="jahr" type="Date" mapping-key="[Jahr]"/>
        
<column name="beschaffungsstrategie" type="String"  mapping-key="[Beschaffungsstrategie]"/>
        
<column name="buchVon" type="String" mapping-key="[Buch von]"/>
        
    
</entity>
</service-builder>

 

3.       Ant build-service.xml, let liferay to generate code.

4.       Create a new file named ext-spring.xml in src\META-INF folder. And copy the following code:

 

<?xml version="1.0"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
    
<bean id="secondDataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy" lazy-init="true">
        
<property name="targetDataSource">
            
<bean class="com.liferay.portal.dao.jdbc.util.DataSourceFactoryBean">
                
<property name="propertyPrefix" value="jdbc.second." />
            
</bean>
        
</property>
    
</bean>
    
<bean id="secondHibernateSessionFactory" class="com.liferay.portal.spring.hibernate.PortalHibernateConfiguration" lazy-init="true">
        
<property name="dataSource">
            
<ref bean="secondDataSource" />
        
</property>
        
<property name="mappingResources">
            
<list>
                
<value>META-INF/portlet-hbm.xml</value>
            
</list>
        
</property>
    
</bean>
    
<bean id="secondSessionFactory" class="com.liferay.portal.dao.orm.hibernate.SessionFactoryImpl" lazy-init="true">
        
<property name="sessionFactoryImplementor">
            
<ref bean="secondHibernateSessionFactory" />
        
</property>
    
</bean>
    
<bean id="secondTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager" lazy-init="true">
        
<property name="dataSource">
            
<ref bean="secondDataSource" />
        
</property>
        
<property name="sessionFactory">
            
<ref bean="secondHibernateSessionFactory" />
        
</property>
    
</bean>
</beans>

 

5.       No more. So easy right? About how to call and deploy it. I believe that you can do.

 



]]>
Custom queries in Liferay(custom-sql)http://www.aygfsteel.com/Noah/articles/362176.html眼镜?/dc:creator>眼镜?/author>Thu, 27 Oct 2011 09:44:00 GMThttp://www.aygfsteel.com/Noah/articles/362176.htmlhttp://www.aygfsteel.com/Noah/comments/362176.htmlhttp://www.aygfsteel.com/Noah/articles/362176.html#Feedback0http://www.aygfsteel.com/Noah/comments/commentRss/362176.htmlhttp://www.aygfsteel.com/Noah/services/trackbacks/362176.html阅读全文

]]>
Liferay中部分配|文?Portal.properties)的相兌?/title><link>http://www.aygfsteel.com/Noah/articles/286450.html</link><dc:creator>眼镜?/dc:creator><author>眼镜?/author><pubDate>Sun, 12 Jul 2009 05:19:00 GMT</pubDate><guid>http://www.aygfsteel.com/Noah/articles/286450.html</guid><wfw:comment>http://www.aygfsteel.com/Noah/comments/286450.html</wfw:comment><comments>http://www.aygfsteel.com/Noah/articles/286450.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Noah/comments/commentRss/286450.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Noah/services/trackbacks/286450.html</trackback:ping><description><![CDATA[<p> </p> <p>一句话也不用多_(d)</p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080"> 1</span><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><span style="color: #000000">#讄囄库中Q上传图片的大小Q单位是Bit <br /> </span><span style="color: #008080"> 2</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />ig.image.max.size</span><span style="color: #000000">=</span><span style="color: #000000">10240000</span><span style="color: #000000"><br /> </span><span style="color: #008080"> 3</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#允许囄上传的类?br /> </span><span style="color: #008080"> 4</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />ig.image.extensions</span><span style="color: #000000">=</span><span style="color: #000000">.bmp</span><span style="color: #000000">,</span><span style="color: #000000">.gif</span><span style="color: #000000">,</span><span style="color: #000000">.jpeg</span><span style="color: #000000">,</span><span style="color: #000000">.jpg</span><span style="color: #000000">,</span><span style="color: #000000">.png</span><span style="color: #000000">,</span><span style="color: #000000">.tif</span><span style="color: #000000">,</span><span style="color: #000000">.tiff<br /> </span><span style="color: #008080"> 5</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080"> 6</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄文档库中Q上传文件的大小Q单位是Bit<br /> </span><span style="color: #008080"> 7</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />dl.file.max.size</span><span style="color: #000000">=</span><span style="color: #000000">3072000</span><span style="color: #000000"><br /> </span><span style="color: #008080"> 8</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080"> 9</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#允许文档上传的类?br /> </span><span style="color: #008080">10</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />dl.file.extensions</span><span style="color: #000000">=</span><span style="color: #000000">.bmp</span><span style="color: #000000">,</span><span style="color: #000000">.css</span><span style="color: #000000">,</span><span style="color: #000000">.doc</span><span style="color: #000000">,</span><span style="color: #000000">.dot</span><span style="color: #000000">,</span><span style="color: #000000">.gif</span><span style="color: #000000">,</span><span style="color: #000000">.gz</span><span style="color: #000000">,</span><span style="color: #000000">.htm</span><span style="color: #000000">,</span><span style="color: #000000">.html</span><span style="color: #000000">,</span><span style="color: #000000">.jpg</span><span style="color: #000000">,</span><span style="color: #000000">.js</span><span style="color: #000000">,</span><span style="color: #000000">.odb</span><span style="color: #000000">,</span><span style="color: #000000">.odf</span><span style="color: #000000">,</span><span style="color: #000000">.odg</span><span style="color: #000000">,</span><span style="color: #000000">.odp</span><span style="color: #000000">,</span><span style="color: #000000">.ods</span><span style="color: #000000">,</span><span style="color: #000000">.odt</span><span style="color: #000000">,</span><span style="color: #000000">.pdf</span><span style="color: #000000">,</span><span style="color: #000000">.png</span><span style="color: #000000">,</span><span style="color: #000000">.ppt</span><span style="color: #000000">,</span><span style="color: #000000">.rtf</span><span style="color: #000000">,</span><span style="color: #000000">.swf</span><span style="color: #000000">,</span><span style="color: #000000">.sxc</span><span style="color: #000000">,</span><span style="color: #000000">.sxi</span><span style="color: #000000">,</span><span style="color: #000000">.sxw</span><span style="color: #000000">,</span><span style="color: #000000">.tar</span><span style="color: #000000">,</span><span style="color: #000000">.tiff</span><span style="color: #000000">,</span><span style="color: #000000">.tgz</span><span style="color: #000000">,</span><span style="color: #000000">.txt</span><span style="color: #000000">,</span><span style="color: #000000">.vsd</span><span style="color: #000000">,</span><span style="color: #000000">.xls</span><span style="color: #000000">,</span><span style="color: #000000">.xml</span><span style="color: #000000">,</span><span style="color: #000000">.zip<br /> </span><span style="color: #008080">11</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">12</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#d相关Q这个可以在企业理里设|)(j)<br /> </span><span style="color: #008080">13</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />company.security.auth.type</span><span style="color: #000000">=</span><span style="color: #000000">screenName<br /> </span><span style="color: #008080">14</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />company.security.auto.login</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">15</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />company.security.send.password</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">16</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />company.security.strangers</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">17</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />open.id.auth.enabled</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">18</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">19</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#是否出现用户首次登陆的协议页?br /> </span><span style="color: #008080">20</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />terms.of.use.required</span><span style="color: #000000">=</span><span style="color: #000000">true<br /> </span><span style="color: #008080">21</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /> <br /> </span><span style="color: #008080">22</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#默认用户布局<br /> </span><span style="color: #008080">23</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#可以自己讄上面要放的Portlet?br /> </span><span style="color: #008080">24</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.user.layout.name</span><span style="color: #000000">=</span><span style="color: #000000">Home<br /> </span><span style="color: #008080">25</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.user.layout.template.id</span><span style="color: #000000">=</span><span style="color: #000000">3_columns<br /> </span><span style="color: #008080">26</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.user.layout.column-</span><span style="color: #000000">1</span><span style="color: #000000">=</span><span style="color: #000000"><br /> </span><span style="color: #008080">27</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.user.layout.column-</span><span style="color: #000000">2</span><span style="color: #000000">=</span><span style="color: #000000"><br /> </span><span style="color: #008080">28</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.user.layout.column-</span><span style="color: #000000">3</span><span style="color: #000000">=</span><span style="color: #000000"><br /> </span><span style="color: #008080">29</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.user.layout.column-</span><span style="color: #000000">4</span><span style="color: #000000">=</span><span style="color: #000000"><br /> </span><span style="color: #008080">30</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">31</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄默认的用h?br /> </span><span style="color: #008080">32</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />layout.default.template.id</span><span style="color: #000000">=</span><span style="color: #000000">2_columns_ii<br /> </span><span style="color: #008080">33</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /> <br /> </span><span style="color: #008080">34</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#Session控制<br /> </span><span style="color: #008080">35</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />session.timeout</span><span style="color: #000000">=</span><span style="color: #000000">30</span><span style="color: #000000"><br /> </span><span style="color: #008080">36</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />session.timeout.warning</span><span style="color: #000000">=</span><span style="color: #000000">1</span><span style="color: #000000"><br /> </span><span style="color: #008080">37</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />session.timeout.auto.extend</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">38</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /> <br /> </span><span style="color: #008080">39</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#隐藏没权限的Portlet<br /> </span><span style="color: #008080">40</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />layout.show.portlet.access.denied</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">41</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#隐藏不活动的Portlet<br /> </span><span style="color: #008080">42</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />layout.show.portlet.inactive</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">43</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄用户是否可以增加Portlet<br /> </span><span style="color: #008080">44</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />layout.add.portlets</span><span style="color: #000000">=</span><span style="color: #000000">true<br /> </span><span style="color: #008080">45</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄是否昄最大化图标<br /> </span><span style="color: #008080">46</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />layout.guest.show.max.icon</span><span style="color: #000000">=</span><span style="color: #000000">true<br /> </span><span style="color: #008080">47</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄是否昄最化图标<br /> </span><span style="color: #008080">48</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />layout.guest.show.min.icon</span><span style="color: #000000">=</span><span style="color: #000000">false<br /> </span><span style="color: #008080">49</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">50</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#权限讄的读取\?br /> </span><span style="color: #008080">51</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />resource.actions.configs</span><span style="color: #000000">=</span><span style="color: #000000">resource-actions/default.xml<br /> </span><span style="color: #008080">52</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">53</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄默认的用户头?br /> </span><span style="color: #008080">54</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />image.default.user.female.portrait</span><span style="color: #000000">=</span><span style="color: #000000">com/liferay/portal/dependencies/user_female_portrait.gif<br /> </span><span style="color: #008080">55</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />image.default.user.male.portrait</span><span style="color: #000000">=</span><span style="color: #000000">com/liferay/portal/dependencies/user_male_portrait.gif<br /> </span><span style="color: #008080">56</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">57</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄默认的Logo<br /> </span><span style="color: #008080">58</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />image.default.company.logo</span><span style="color: #000000">=</span><span style="color: #000000">com/liferay/portal/dependencies/company_logo.png<br /> </span><span style="color: #008080">59</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">60</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄认证登陆的页?br /> </span><span style="color: #008080">61</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />auth.login.url</span><span style="color: #000000">=</span><span style="color: #000000">/web/</span><span style="color: #000000">12702</span><span style="color: #000000">/</span><span style="color: #000000">1</span><span style="color: #000000"><br /> </span><span style="color: #008080">62</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄d后的面路径<br /> </span><span style="color: #008080">63</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />default.logout.page.path</span><span style="color: #000000">=</span><span style="color: #000000">/web/</span><span style="color: #000000">12702</span><span style="color: #000000"><br /> </span><span style="color: #008080">64</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /><br /> </span><span style="color: #008080">65</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />#讄默认的用戯?br /> </span><span style="color: #008080">66</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" />admin.default.role.names</span><span style="color: #000000">=</span><span style="color: #000000">Power User\nUser<br /> </span><span style="color: #008080">67</span><span style="color: #000000"><img align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" alt="" /></span></div> <img src ="http://www.aygfsteel.com/Noah/aggbug/286450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Noah/" target="_blank">眼镜?/a> 2009-07-12 13:19 <a href="http://www.aygfsteel.com/Noah/articles/286450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>CAS单点登陆,中文用户名无法验证解x?/title><link>http://www.aygfsteel.com/Noah/articles/286449.html</link><dc:creator>眼镜?/dc:creator><author>眼镜?/author><pubDate>Sun, 12 Jul 2009 05:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/Noah/articles/286449.html</guid><wfw:comment>http://www.aygfsteel.com/Noah/comments/286449.html</wfw:comment><comments>http://www.aygfsteel.com/Noah/articles/286449.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Noah/comments/commentRss/286449.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Noah/services/trackbacks/286449.html</trackback:ping><description><![CDATA[<p>登陆名如果用中文的话Q会(x)出现qQ导致无法验证通过。解决中文问题无非就是编码问题,其中需要{换编码的有以下几个地方.</p> <p>W一Q在Web.xml文g里加上FilterQ对所有页面进行一ơ编码{换.</p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080"> 1</span><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff"><</span><span style="color: #800000">filter</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 2</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">description</span><span style="color: #0000ff">></span><span style="color: #000000">EncodingFilter</span><span style="color: #0000ff"></</span><span style="color: #800000">description</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 3</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">></span><span style="color: #000000">EncodingFilter</span><span style="color: #0000ff"></</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 4</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">></span><span style="color: #000000">com.xyb.EncodingFilter</span><span style="color: #0000ff"></</span><span style="color: #800000">filter-class</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 5</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">init-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 6</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">description</span><span style="color: #0000ff">></span><span style="color: #000000">encoding_charset</span><span style="color: #0000ff"></</span><span style="color: #800000">description</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 7</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000">encoding</span><span style="color: #0000ff"></</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 8</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">param-value</span><span style="color: #0000ff">>gb2312</span><span style="color: #0000ff"></</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080"> 9</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">init-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">init-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000">ignore</span><span style="color: #0000ff"></</span><span style="color: #800000">param-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />            </span><span style="color: #0000ff"><</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000">true</span><span style="color: #0000ff"></</span><span style="color: #800000">param-value</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"></</span><span style="color: #800000">init-param</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff"></</span><span style="color: #800000">filter</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff"><</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">></span><span style="color: #000000">EncodingFilter</span><span style="color: #0000ff"></</span><span style="color: #800000">filter-name</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" />        </span><span style="color: #0000ff"><</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span><span style="color: #000000">/*</span><span style="color: #0000ff"></</span><span style="color: #800000">url-pattern</span><span style="color: #0000ff">></span><span style="color: #000000"><br /> </span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff"></</span><span style="color: #800000">filter-mapping</span><span style="color: #0000ff">></span></div> <p>下面是EncodingFilterc:(x)</p> <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><span style="color: #008080"> 1</span><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><span style="color: #0000ff">package</span><span style="color: #000000"> com.xyb;<br /> </span><span style="color: #008080"> 2</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> </span><span style="color: #008080"> 3</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> java.io.IOException;<br /> </span><span style="color: #008080"> 4</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> </span><span style="color: #008080"> 5</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.Filter;<br /> </span><span style="color: #008080"> 6</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.FilterChain;<br /> </span><span style="color: #008080"> 7</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.FilterConfig;<br /> </span><span style="color: #008080"> 8</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.ServletException;<br /> </span><span style="color: #008080"> 9</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.ServletRequest;<br /> </span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /></span><span style="color: #0000ff">import</span><span style="color: #000000"> javax.servlet.ServletResponse;<br /> </span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/None.gif" /><br /> </span><span style="color: #008080">12</span><span style="color: #000000"><img id="Codehighlighter1_260_288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_260_288_Open_Text.style.display='none'; Codehighlighter1_260_288_Closed_Image.style.display='inline'; Codehighlighter1_260_288_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_260_288_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_260_288_Closed_Text.style.display='none'; Codehighlighter1_260_288_Open_Image.style.display='inline'; Codehighlighter1_260_288_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_260_288_Closed_Text">/** */</span><span id="Codehighlighter1_260_288_Open_Text"><span style="color: #008000">/**</span><span style="color: #008000"><br /> </span><span style="color: #008080">13</span><span style="color: #008000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />*<br /> </span><span style="color: #008080">14</span><span style="color: #008000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />* </span><span style="color: #808080">@author</span><span style="color: #008000"> XiangYabin<br /> </span><span style="color: #008080">15</span><span style="color: #008000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" /></span><span style="color: #008000">*/</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">16</span><span style="color: #000000"><img id="Codehighlighter1_336_1811_Open_Image" onclick="this.style.display='none'; Codehighlighter1_336_1811_Open_Text.style.display='none'; Codehighlighter1_336_1811_Closed_Image.style.display='inline'; Codehighlighter1_336_1811_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockStart.gif" /><img style="display: none" id="Codehighlighter1_336_1811_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_336_1811_Closed_Text.style.display='none'; Codehighlighter1_336_1811_Open_Image.style.display='inline'; Codehighlighter1_336_1811_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedBlock.gif" /></span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">class</span><span style="color: #000000"> EncodingFilter </span><span style="color: #0000ff">implements</span><span style="color: #000000"> Filter </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_336_1811_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_336_1811_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    <br /> </span><span style="color: #008080">18</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">protected</span><span style="color: #000000"> String encoding </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> </span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">protected</span><span style="color: #000000"> FilterConfig filterConfig </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> </span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">protected</span><span style="color: #000000"> </span><span style="color: #0000ff">boolean</span><span style="color: #000000"> ignore </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /> </span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    <br /> </span><span style="color: #008080">22</span><span style="color: #000000"><img id="Codehighlighter1_497_585_Open_Image" onclick="this.style.display='none'; Codehighlighter1_497_585_Open_Text.style.display='none'; Codehighlighter1_497_585_Closed_Image.style.display='inline'; Codehighlighter1_497_585_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_497_585_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_497_585_Closed_Text.style.display='none'; Codehighlighter1_497_585_Open_Image.style.display='inline'; Codehighlighter1_497_585_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> destroy() </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_497_585_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_497_585_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">23</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.encoding </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> </span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.filterConfig </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">;<br /> </span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">27</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">28</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    <br /> </span><span style="color: #008080">29</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> doFilter(ServletRequest request, ServletResponse response,<br /> </span><span style="color: #008080">30</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            FilterChain chain)<br /> </span><span style="color: #008080">31</span><span style="color: #000000"><img id="Codehighlighter1_747_1139_Open_Image" onclick="this.style.display='none'; Codehighlighter1_747_1139_Open_Text.style.display='none'; Codehighlighter1_747_1139_Closed_Image.style.display='inline'; Codehighlighter1_747_1139_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_747_1139_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_747_1139_Closed_Text.style.display='none'; Codehighlighter1_747_1139_Open_Image.style.display='inline'; Codehighlighter1_747_1139_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" />            </span><span style="color: #0000ff">throws</span><span style="color: #000000"> IOException, ServletException </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_747_1139_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_747_1139_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">32</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #008000">//</span><span style="color: #008000"> Conditionally select and set the character encoding to be used</span><span style="color: #008000"><br /> </span><span style="color: #008080">33</span><span style="color: #008000"><img id="Codehighlighter1_879_1034_Open_Image" onclick="this.style.display='none'; Codehighlighter1_879_1034_Open_Text.style.display='none'; Codehighlighter1_879_1034_Closed_Image.style.display='inline'; Codehighlighter1_879_1034_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_879_1034_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_879_1034_Closed_Text.style.display='none'; Codehighlighter1_879_1034_Open_Image.style.display='inline'; Codehighlighter1_879_1034_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" /></span><span style="color: #000000">        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (ignore </span><span style="color: #000000">||</span><span style="color: #000000"> (request.getCharacterEncoding() </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">)) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_879_1034_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_879_1034_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">34</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            String encoding </span><span style="color: #000000">=</span><span style="color: #000000"> selectEncoding(request);<br /> </span><span style="color: #008080">35</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            </span><span style="color: #0000ff">if</span><span style="color: #000000"> (encoding </span><span style="color: #000000">!=</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /> </span><span style="color: #008080">36</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />                request.setCharacterEncoding(encoding);<br /> </span><span style="color: #008080">37</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />        }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">38</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">39</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #008000">//</span><span style="color: #008000"> Pass control on to the next filter</span><span style="color: #008000"><br /> </span><span style="color: #008080">40</span><span style="color: #008000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" /></span><span style="color: #000000">        chain.doFilter(request, response);<br /> </span><span style="color: #008080">41</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">42</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">43</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    <br /> </span><span style="color: #008080">44</span><span style="color: #000000"><img id="Codehighlighter1_1218_1681_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1218_1681_Open_Text.style.display='none'; Codehighlighter1_1218_1681_Closed_Image.style.display='inline'; Codehighlighter1_1218_1681_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_1218_1681_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1218_1681_Closed_Text.style.display='none'; Codehighlighter1_1218_1681_Open_Image.style.display='inline'; Codehighlighter1_1218_1681_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="color: #0000ff">public</span><span style="color: #000000"> </span><span style="color: #0000ff">void</span><span style="color: #000000"> init(FilterConfig filterConfig) </span><span style="color: #0000ff">throws</span><span style="color: #000000"> ServletException </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1218_1681_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_1218_1681_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">45</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">46</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.filterConfig </span><span style="color: #000000">=</span><span style="color: #000000"> filterConfig;<br /> </span><span style="color: #008080">47</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">this</span><span style="color: #000000">.encoding </span><span style="color: #000000">=</span><span style="color: #000000"> filterConfig.getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">encoding</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">48</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        String value </span><span style="color: #000000">=</span><span style="color: #000000"> filterConfig.getInitParameter(</span><span style="color: #000000">"</span><span style="color: #000000">ignore</span><span style="color: #000000">"</span><span style="color: #000000">);<br /> </span><span style="color: #008080">49</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">if</span><span style="color: #000000"> (value </span><span style="color: #000000">==</span><span style="color: #000000"> </span><span style="color: #0000ff">null</span><span style="color: #000000">)<br /> </span><span style="color: #008080">50</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            </span><span style="color: #0000ff">this</span><span style="color: #000000">.ignore </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /> </span><span style="color: #008080">51</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (value.equalsIgnoreCase(</span><span style="color: #000000">"</span><span style="color: #000000">true</span><span style="color: #000000">"</span><span style="color: #000000">))<br /> </span><span style="color: #008080">52</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            </span><span style="color: #0000ff">this</span><span style="color: #000000">.ignore </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /> </span><span style="color: #008080">53</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">else</span><span style="color: #000000"> </span><span style="color: #0000ff">if</span><span style="color: #000000"> (value.equalsIgnoreCase(</span><span style="color: #000000">"</span><span style="color: #000000">yes</span><span style="color: #000000">"</span><span style="color: #000000">))<br /> </span><span style="color: #008080">54</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            </span><span style="color: #0000ff">this</span><span style="color: #000000">.ignore </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">true</span><span style="color: #000000">;<br /> </span><span style="color: #008080">55</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">else</span><span style="color: #000000"><br /> </span><span style="color: #008080">56</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />            </span><span style="color: #0000ff">this</span><span style="color: #000000">.ignore </span><span style="color: #000000">=</span><span style="color: #000000"> </span><span style="color: #0000ff">false</span><span style="color: #000000">;<br /> </span><span style="color: #008080">57</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">58</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">59</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    <br /> </span><span style="color: #008080">60</span><span style="color: #000000"><img id="Codehighlighter1_1748_1804_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1748_1804_Open_Text.style.display='none'; Codehighlighter1_1748_1804_Closed_Image.style.display='inline'; Codehighlighter1_1748_1804_Closed_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockStart.gif" /><img style="display: none" id="Codehighlighter1_1748_1804_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1748_1804_Closed_Text.style.display='none'; Codehighlighter1_1748_1804_Open_Image.style.display='inline'; Codehighlighter1_1748_1804_Open_Text.style.display='inline';" alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ContractedSubBlock.gif" />    </span><span style="color: #0000ff">protected</span><span style="color: #000000"> String selectEncoding(ServletRequest request) </span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1748_1804_Closed_Text"><img alt="" src="http://www.aygfsteel.com/Images/dot.gif" /></span><span id="Codehighlighter1_1748_1804_Open_Text"><span style="color: #000000">{<br /> </span><span style="color: #008080">61</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">62</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        </span><span style="color: #0000ff">return</span><span style="color: #000000"> (</span><span style="color: #0000ff">this</span><span style="color: #000000">.encoding);<br /> </span><span style="color: #008080">63</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />        <br /> </span><span style="color: #008080">64</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedSubBlockEnd.gif" />    }</span></span><span style="color: #000000"><br /> </span><span style="color: #008080">65</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/InBlock.gif" />    <br /> </span><span style="color: #008080">66</span><span style="color: #000000"><img alt="" align="top" src="http://www.aygfsteel.com/images/OutliningIndicators/ExpandedBlockEnd.gif" />}</span></span></div> <p>W二步,修改CAS登陆验证面的编码,如果你没换过q个主题的话Q默认的是修改WEB-INF\view\jsp\default\ui\casLoginView.jsp文gQ在最上面加上<%@ page pageEncoding="gb2312"%>。这里要特别注意一下,q个面的编码要和上面XML文g里写的编码一致?/p> <p>W三步,修改验证成功后做跌{的页面。也是WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文gQ在最上面加上<%@ page pageEncoding="UTF-8"%>。这里特别注意的是这个页面的~码要和你蟩转过ȝ那个面的编码一_(d)换句话说Q客L(fng)的验证页面的~码要和q个地方的一_(d)不一致的话,要{换一下?/p> <p>l过q三步之后,理论上讲已l可以验证通过?jin)?/p> <img src ="http://www.aygfsteel.com/Noah/aggbug/286449.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Noah/" target="_blank">眼镜?/a> 2009-07-12 13:02 <a href="http://www.aygfsteel.com/Noah/articles/286449.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay中搜索功能增?/title><link>http://www.aygfsteel.com/Noah/articles/277787.html</link><dc:creator>眼镜?/dc:creator><author>眼镜?/author><pubDate>Mon, 25 May 2009 02:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/Noah/articles/277787.html</guid><wfw:comment>http://www.aygfsteel.com/Noah/comments/277787.html</wfw:comment><comments>http://www.aygfsteel.com/Noah/articles/277787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/Noah/comments/commentRss/277787.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/Noah/services/trackbacks/277787.html</trackback:ping><description><![CDATA[<p>默认情况下,Liferay中自带的那个搜烦(ch)条,是在右上角的那个,只能搜烦(ch)JournalContent的内宏V其实,我们最x索的是JournalArticle中的内容。所以可以把q个功能改进一下。修Ҏ(gu)法很单?/p> <p>打开源代码文件util-taglib/src/com/liferay/taglib/util/VelocityTaglib.java<br /> 扑ֈjournalContentSearch()Ҏ(gu)Q再后面增加一个方法:(x)<br /> public String journalArticleSearch() throws Exception {<br />   _res.recycle();</p> <p>  SearchTag.doTag(_ctx, _req, _res);</p> <p>  return _res.getString();<br />  }<br /> 重新成生util-taglib.Jar包。发布到服务器?/p> <p>然后Q修改主题包中原来的$theme.journalContentSearch()?theme.journalArticleSearch()Q即可?/p> <img src ="http://www.aygfsteel.com/Noah/aggbug/277787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/Noah/" target="_blank">眼镜?/a> 2009-05-25 10:31 <a href="http://www.aygfsteel.com/Noah/articles/277787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay中用CAS实现单点登陆(SSO)http://www.aygfsteel.com/Noah/articles/256018.html眼镜?/dc:creator>眼镜?/author>Sun, 22 Feb 2009 04:53:00 GMThttp://www.aygfsteel.com/Noah/articles/256018.htmlhttp://www.aygfsteel.com/Noah/comments/256018.htmlhttp://www.aygfsteel.com/Noah/articles/256018.html#Feedback3http://www.aygfsteel.com/Noah/comments/commentRss/256018.htmlhttp://www.aygfsteel.com/Noah/services/trackbacks/256018.html单点登陆(SSO)的实现方式有很多U,q里所说的是用CAS实现Q这也是Liferay中所采纳的方式。至于什么是CASQ单点登陆实现的原理{,q里不做解释Q直接一步一步明说实现方式,好了(jin)Q多一个字的费话也不说?jin)?/p>

W一步,创徏证书

keytool -genkey -alias tomcat -keystore c:\mykeystore  -dname "CN=xyb, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456

PS:

 -genkey         创徏一个证?br /> -alias          证书的别?br /> -keystore       指定生成此证书的路径(可不写,默认存在pȝ的Home目录?keystore文g?br /> -storepass      指定密钥库的密码
-keypass        指定别名条目的密?br /> -dname          指定证书拥有者信?可不写,但,pȝ?x)提CZ依次输入q些信息Q特别要注意“CN”的值是你想做ؓ(f)CAS服务器的q台机器的域名或机器名,但就是不能是IP)
-keyalg         指定密钥的算?可不?   
-validity       指定创徏的证书有效期多少?可不写,默认?0?

W二步,导出证书

keytool -export -alias tomcat -keystore c:\mykeystore -file c:\mycerts.cer -storepass 123456

PS:

-export         别名指定的证书导出到文?br /> -keystore       指定生成此证书的路径(上一步中写的什么这写什么,如果没写Q这也不?
 -file           指定导出到文件的文g?/p>

W三步,把导出的证书导入到客L(fng)服务?/p>

keytool -import -trustcacerts -alias tomcat -keystore "%JAVA_HOME%/JRE/LIB/SECURITY/CACERTS" -storepass 123456 -file c:\mycerts.cer

PS:

-import         已{֐数字证书导入密钥?br /> -file           指定要导入到密钥库的文g?也就是上一步导出的那个文g)
有一个提C:(x)是否信Qq个证书Q输?YQ回车?/p>

W四步,下蝲cas集成包。将下蝲后的文g改名为cas-webQ放|在liferay的webapps目录下,在conf/server.xml中找C面这D,L原有的注释ƈ修改为:(x)

<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" URIEncoding="UTF-8"  keystorePass="123456" keyAlias="tomcat"/>

W五步,在Liferay的webapps\ROOT\WEB-INF\classes\portal-ext.properties下添加如下内容:(x)

cas.auth.enabled=true
cas.login.url=https://xyb:8443/cas-web/login
cas.logout.url=https://xyb:8443/cas-web/logout
cas.server.name=客户端IP:8080
cas.service.url=
#cas.service.url=http://localhost:8080/c/portal/login
cas.validate.url=https://xyb:8443/cas-web/proxyValidate

如果没在Liferay下,只是普通的WebE序可用Filter来实玎ͼ打开Web-INF\Web.XML文gQ增加如下代?/p>

<filter>
        
<filter-name>CASFilter</filter-name>
        
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
        
<init-param>
            
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
            
<param-value>https://xyb:8443/cas-web/login</param-value>
        
</init-param><!--q里的xyb是CAS服务端的IP或机器名-->
        
<init-param>
            
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
            
<param-value>https://xyb:8443/cas-web/proxyValidate</param-value>
        
</init-param>
        
<init-param>
          
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
          
<param-value>localhost:8080</param-value><!--client:port是需要CAS需要拦截的地址和端口,一般就是这个TOMCAT所启动的IP和port-->
        
</init-param>
    
</filter>
    
    
<filter-mapping>
        
<filter-name>CASFilter</filter-name>
        
<url-pattern>/*</url-pattern><!--q里是你要拦截的URLh-->
    
</filter-mapping>

 

最后一步,在客L(fng)获取CAS认证通过的用户名Qƈ修改w䆾验证E序为只通过用户名来验证。如是在Liferay下就不用做这一步了(jin)QLiferay中本w的验证是ScreenName字段

1、在JSP或Servlet中的用法Q?/p>

<%@ page import="edu.yale.its.tp.cas.client.filter.CASFilter" %>
<%@ page import="javax.servlet.http.HttpServletRequest" %>
<%@ page import="javax.servlet.http.HttpSession" %>
<%
HttpSession ses 
= request.getSession();

String screenName 
=
(String)ses.getAttribute(CASFilter.CAS_FILTER_USER);
System.out.println(
"screenName==:"+screenName);
%> 

2、在Java中通过 Session 获取d用户?/p>

// 以下两者都可以
session.getAttribute(CASFilter.CAS_FILTER_USER);
session.getAttribute(
"edu.yale.its.tp.cas.client.filter.user");

3、在 JSTL 中获取用户名的方?/p>

<c:out value="${sessionScope[CAS:'edu.yale.its.tp.cas.client.filter.user']}"/>


问题汇总:(x)

 严重: edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator prox
yList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://192.168.1.111:8443/cas/proxyValidate] ticket=[ST-0-9h7Mx5HK3pfsdxRv
MD3y] service=[http%3A%2F%2F192.168.1.222%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]

q个CAS异常是从CAS Client里面抛出Q是当我们不使用证书的CN去访问域名的时候(比如上文是用IP讉K而且证书的CN是该IP对应的域名而非该IPQ,CASClient无法信QQ也是我上面特意提到的那个CN的问题。要特别注意?/p>

q有一U情况就是客L(fng)证书没有导入,同样也报q个错误,最l可以归Z句话,肯定是证书验证没有通过所?

 

INFO [org.jasig.cas.authentication.AuthenticationManager
Impl] - <AuthenticationHandler: cn.com.tiansky.cas.authenticationHandlers.UPAuthenticationHandler successfully authenticated the user which provided the followi
ng credentials: [username: test]>

q错误Q可能是客户端的那个配置文g里写的不太对。也是上面说的W五步,要多注意一下?/p>

 

java.io.IOException: Cannot recover key
        at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14Socket
Factory.java:125)
        at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESo
cketFactory.java:88)
        at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoi
nt.java:292)
        at org.apache.coyote.http11.Http11BaseProtocol.init(Http11BaseProtocol.j
ava:138)
        at org.apache.catalina.connector.Connector.initialize(Connector.java:101

q种错误Q可能是你生成的证书有问题,如果keypass和storepass的密码不一致也?x)把q个?不知Z么非要设成一L(fng))



]]>
վ֩ģ壺 | | | | | ʷ| | | | | ξ| ˳| Ϫ| | | ˰| | Ȫ| ľ| | | | żҿ| | | ϲ| ɰ| ɽ| Դ| Ѩ| Դ| | | ɽ| ɽ| | | ̰| ¡| ̨| |