﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-哈哈,吼吼,这是个好地方-随笔分类-java</title><link>http://www.blogjava.net/tufanshu/category/4974.html</link><description>没有风雨躲的过，
没有坎坷不必走……
</description><language>zh-cn</language><lastBuildDate>Wed, 09 Feb 2011 09:42:39 GMT</lastBuildDate><pubDate>Wed, 09 Feb 2011 09:42:39 GMT</pubDate><ttl>60</ttl><item><title>cas server 3.4.5 部署在weblogic问题记录</title><link>http://www.blogjava.net/tufanshu/archive/2011/02/09/343972.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Wed, 09 Feb 2011 08:16:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2011/02/09/343972.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/343972.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2011/02/09/343972.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/343972.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/343972.html</trackback:ping><description><![CDATA[1.weblogic必须是10.3.4.0或以上版本，由于cas server采用了spring 2.5的版本，使用JPA2.0的原因，weblogic10.3.4之前的版本不支持jpa2.0<br />
2.cas server webapp 如果以war的方式发布，会因为log4j.xml的问题而不能正常发布，具体原因还没有完全弄清楚，但是如果以解开后的文件夹目录的方式发布则没有问题。<br />
<br />
<img src ="http://www.blogjava.net/tufanshu/aggbug/343972.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2011-02-09 16:16 <a href="http://www.blogjava.net/tufanshu/archive/2011/02/09/343972.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cas server使用mysql数据库和oralce数据库的差异</title><link>http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Wed, 26 Jan 2011 01:05:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/343543.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/343543.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/343543.html</trackback:ping><description><![CDATA[测试环境下使用的是mysql数据库，切换到正式的oralce数据库中去发现cas server是无效的，主要的原因是由于数据库的差异导致的<br />
认证用户的sql语句在mysql<span style="color: red;">下为</span>：<br />
select password from user_login where username=? and e<span style="color: red;">nabled=tr</span>ue<br />
而在oracle下应该为<br />
select password from user_login where username=? and <span style="color: red;">enabled=1</span><br />
主要由于oralce和mysql对boolean字段的处理不一致导致的。<br />
<br />
<img src ="http://www.blogjava.net/tufanshu/aggbug/343543.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2011-01-26 09:05 <a href="http://www.blogjava.net/tufanshu/archive/2011/01/26/343543.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cas server logout的问题</title><link>http://www.blogjava.net/tufanshu/archive/2011/01/21/343318.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Fri, 21 Jan 2011 05:38:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2011/01/21/343318.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/343318.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2011/01/21/343318.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/343318.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/343318.html</trackback:ping><description><![CDATA[<p>cas server logout后，默认是停留在cas的退出页面，一般我们需要重新转向到客户端网站的登录或是相关的页面，一般需要进行一下配置</p>
<p>1.cas-server端，配置文件为/WEB-INFO/cas-servlet.xml中的logoutController</p>
<p>&nbsp;&lt;bean id="logoutController" class="org.jasig.cas.web.LogoutController"&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; p:centralAuthenticationService-ref="centralAuthenticationService"&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; p:logoutView="casLogoutView"&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; p:warnCookieGenerator-ref="warnCookieGenerator"&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;"> p:followServiceRedirects="true"/</span>&gt;</p>
<img src ="http://www.blogjava.net/tufanshu/aggbug/343318.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2011-01-21 13:38 <a href="http://www.blogjava.net/tufanshu/archive/2011/01/21/343318.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cas配置全攻略</title><link>http://www.blogjava.net/tufanshu/archive/2011/01/21/343290.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Fri, 21 Jan 2011 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2011/01/21/343290.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/343290.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2011/01/21/343290.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/343290.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/343290.html</trackback:ping><description><![CDATA[<p>
经过将近两天的测试，参考众多网友的贡献，终于完成了对cas的主要配置和测试，现记录如下</p>
<p>基本需求：</p>
<p>1.cas server-3.4.5,casclient-3.2（官方版本），均可在cas官方网站下载，<a href="http://www.jasig.org">http://www.jasig.org</a></p>
<p>2.使用低成本的http协议进行传输，俺买不起ssl证书</p>
<p>3.通过jdbc进行用户验证</p>
<p>4.需要通过casserver提供除登录用户名以外的附加信息</p>
<p>参考资料：</p>
<p>1.cas官方网站的用户帮助手册和wiki</p>
<p>2.网友&#8220;城市猎人&#8221;的blog，<a href="http://yuzhwe.javaeye.com/blog/830143">http://yuzhwe.javaeye.com/blog/830143</a></p>
<p>3.网友&#8220;悟空悟道&#8221;的blog，<a href="http://llhdf.javaeye.com/blog/764385">http://llhdf.javaeye.com/blog/764385</a></p>
<p>4.其他网友贡献的相关的blog，都是通过google出来，就不一一列出了，一并致谢！！！</p>
<p>好了，下面进入正题，如果您不想测试中出现异常情况，或是获取不到相关数据，请关注文中的红色字体部分。</p>
<p>（1）使用http协议的设置，如果您也像我一样，买不起ssl数字证书，对安全的要求也不是特别的搞，下面的配置就可以帮助解决这个问题：</p>
<p>在cas-server-webapp中的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml文件中有如下配置</p>
<p>&lt;bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"<br />
&nbsp;&nbsp;p:cookieSecure="true"&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;&nbsp;//默认为true，使用https,如果只需要http，修改为false即可<br />
</span>&nbsp;&nbsp;p:cookieMaxAge="-1"<br />
&nbsp;&nbsp;p:cookieName="CASTGC"<br />
&nbsp;&nbsp;p:cookiePath="/cas" /&gt;</p>
<p>&nbsp;（2）使用jdbc数据源进行用户认证，需要修改cas的authenticationHandlers方式，在文件/WEB-INF/deployerConfigContext.xml有如下配置：</p>
<p>&lt;property name="authenticationHandlers"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| This is the authentication handler that authenticates services by means of callback via SSL, thereby validating<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| a server side SSL certificate.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p:httpClient-ref="httpClient" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| This is the authentication handler declaration that every CAS deployer will need to change before deploying CAS <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| into production.&nbsp; The default SimpleTestUsernamePasswordAuthenticationHandler authenticates UsernamePasswordCredentials<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| where the username equals the password.&nbsp; You will need to replace this with an AuthenticationHandler that implements your<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| local authentication strategy.&nbsp; You might accomplish this by coding a new such handler and declaring<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| edu.someschool.its.cas.MySpecialHandler here, or you might use one of the handlers provided in the adaptors modules.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&lt;bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /&gt;--&gt;<br />
&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;&nbsp;&lt;bean&nbsp; class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="dataSource" ref="dataSource" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: red;">&lt;property name="sql" value="select password from userInfo where username=? and enabled=true" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //用户密码编码方式</span><span style="color: red;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="passwordEncoder"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ref="passwordEncoderBean"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;&nbsp;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;</p>
<p>该属性中的list只要用一个认证通过即可，建议将红色部分放在第一位，如果确认只用jdbc一种方式，其他认证方式均可删除。另外需要在在文件中添加datasoure和passordEncoder两个bean，如下</p>
<p>&lt;!-- Data source definition --&gt;<br />
&nbsp;&lt;bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />
&nbsp;&nbsp;&lt;property name="driverClassName"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;value&gt;jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=utf-8&lt;/value&gt;&nbsp;&nbsp;&nbsp;<span style="color: red;"> //如果使用mysql数据库，应该加上后面的编码参数，否则可能导致客户端对TGT票据无法识别的问题<br />
</span>&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="username"&gt;&lt;value&gt;root&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;&lt;value&gt;password&lt;/value&gt;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&nbsp;&lt;bean id="passwordEncoderBean" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;constructor-arg value="SHA1" /&gt;&nbsp;<span style="color: red;"> //cas <br />
server默认支持MD5和SHA1两种编码方式，如果需要其他的编码方式例如SHA256,512等，可自行实现org.jasig.cas.authentication.handler.PasswordEncoder接口<br />
</span>&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</p>
<p>附加备注：如果您是使用cas server的源码自行编译的话，需要在cas-server-web模块的pom.xml中添加如下模块的依赖：</p>
<p>&lt;dependency&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;groupId&gt;${project.groupId}&lt;/groupId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;artifactId&gt;cas-server-support-jdbc&lt;/artifactId&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;version&gt;${project.version}&lt;/version&gt;<br />
&nbsp;&nbsp;&lt;/dependency&gt;&nbsp;&nbsp; </p>
<p>并添加对应数据库的jdbc的jar包。</p>
<p>（3）让cas server提供更多的用户数据共客户端使用</p>
<p>通过测试，由于cas的代码更新过程中的变化较大，所以包兼容的问题好像一直存在，在测试中我就碰到过，花费时间比较多，建议同学们在使用过程中使用官方的最新的发布版本。在我使用的这个版本中，请参考前面的关于server和client端的版本说明，应该没有包冲突的问题，测试通过。下面进行配置，配置文件：/WEB-INF/deployerConfigContext.xml<br />
&lt;property name="credentialsToPrincipalResolvers"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;!--&lt;bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" /&gt;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;!-- modify on 2011-01-18,add user info --&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" &gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red;">&nbsp;&nbsp;&lt;property name="attributeRepository" &gt;&nbsp;&nbsp; //为认证过的用户的<font color="#000000">Principal添加属性</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ref local="attributeRepository"/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/property&gt;&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;bean<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" /&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/list&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
<span style="color: red;">&nbsp;修改该文件中默认的<font color="#ff0000"> <font color="#ff0000">attributeRepositorybean配置</font><br />
</font></span>&lt;!-- 在这里配置获取更多用户的信息 --&gt;<br />
&nbsp;&lt;bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao"&gt;<br />
&nbsp;&nbsp;&lt;constructor-arg index="0" ref="dataSource" /&gt;<br />
&nbsp;&nbsp;&lt;constructor-arg index="1" value="select id as UId, password_hint as ph from userInfo where username=? and enabled=true" /&gt;<br />
&nbsp;&nbsp;&lt;property name="queryAttributeMapping"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;map&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;entry key="username" value="uid"/&gt;&lt;!-- 这里必须这么写，系统会自己匹配，貌似和where语句后面的用户名字段的拼写没有什么关系 --&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/map&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;!-- 要获取的属性在这里配置 --&gt;<br />
&nbsp;&nbsp;&lt;property name="resultAttributeMapping"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;map&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;entry key="UId" value="userId" /&gt; //key为对应的数据库字段名称，value为提供给客户端获取的属性名字，系统会自动填充值<br />
&nbsp;&nbsp;&nbsp;&lt;entry key="ph" value="passwordHint" /&gt;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&lt;/map&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&lt;/bean&gt;&nbsp;<br />
<span style="color: red;"> 备注：网上有很多的关于这个的配置，但是如果您使用的是我提供的版本或是高于这个版本，就应该象上面这样配置，无用质疑，网上大部分的配置都是基于<br />
person-directory-impl,person-directory-api <br />
1.1左右的版本，而最新的cas使用的是1.5的版本，经过查看源代码和api docs确定最新版本的属性参数如上配置。</span></p>
<p><span style="color: red;">修改该xml文件中最后一个默认的serviceRegistryDao bean中的属性全部注释掉，或者删除，<br />
这个bean中的RegisteredServiceImpl的ignoreAttributes属性将决定是否添加attributes属性内容，默认为false:不添加，只有去掉这个配置，<br />
cas server才会将获取的用户的附加属性添加到认证用的<font style="color: red;" color="#000000">Principal的attributes中去，我在这里犯过这样的错误，最后还是通过跟踪源码才发现的。</font><br />
&lt;bean<br />
&nbsp;&nbsp;id="serviceRegistryDao"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!--<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="registeredServices"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.jasig.cas.services.RegisteredServiceImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="0" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="HTTP" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" value="Only Allows HTTP Urls" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="serviceId" value="http://**" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.jasig.cas.services.RegisteredServiceImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="1" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="HTTPS" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" value="Only Allows HTTPS Urls" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="serviceId" value="https://**" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.jasig.cas.services.RegisteredServiceImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="2" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="IMAPS" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" value="Only Allows HTTPS Urls" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="serviceId" value="imaps://**" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p><span style="color: red;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;bean class="org.jasig.cas.services.RegisteredServiceImpl"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="id" value="3" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="name" value="IMAP" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="description" value="Only Allows IMAP Urls" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;property name="serviceId" value="imap://**" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/list&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/property&gt;--&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/bean&gt;</span></p>
<p>&nbsp;修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件，如下：</p>
<p>&lt;%@ page session="false"%&gt;<br />
&lt;%@ taglib prefix="c" uri="<a href="http://java.sun.com/jsp/jstl/core%22%">http://java.sun.com/jsp/jstl/core"%</a>&gt;<br />
&lt;%@ taglib uri="<a href="http://java.sun.com/jsp/jstl/functions">http://java.sun.com/jsp/jstl/functions</a>" prefix="fn"%&gt;<br />
&lt;cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'&gt;<br />
&nbsp;&lt;cas:authenticationSuccess&gt;<br />
&nbsp;&nbsp;&lt;cas:user&gt;${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}&lt;/cas:user&gt;<br />
&nbsp;&nbsp;&lt;c:if test="${not empty pgtIou}"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;cas:proxyGrantingTicket&gt;${pgtIou}&lt;/cas:proxyGrantingTicket&gt;<br />
&nbsp;&nbsp;&lt;/c:if&gt;<br />
&nbsp;&nbsp;&lt;c:if test="${fn:length(assertion.chainedAuthentications) &gt; 1}"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;cas:proxies&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:forEach var="proxy" items="${assertion.chainedAuthentications}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varStatus="loopStatus" begin="0"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end="${fn:length(assertion.chainedAuthentications)-2}" step="1"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cas:proxy&gt;${fn:escapeXml(proxy.principal.id)}&lt;/cas:proxy&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:forEach&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/cas:proxies&gt;<br />
&nbsp;&nbsp;&lt;/c:if&gt;<br />
&nbsp;<span style="color: red;">&nbsp;&nbsp;&lt;c:if<br />
&nbsp;&nbsp;&nbsp;test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)<br />
<br />
&gt; <br />
0}"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;cas:attributes&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:forEach <br />
var="attr"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;varStatus="loopStatus" <br />
begin="0"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;step="1"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;cas:${fn:escapeXml(attr.key)}&gt;${fn:escapeXml(attr.value)}&lt;/cas:${fn:escapeXml(attr.key)}&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:forEach&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;/cas:attributes&gt;<br />
&nbsp;&nbsp;&lt;/c:if&gt;<br />
</span>&nbsp;&lt;/cas:authenticationSuccess&gt;<br />
&lt;/cas:serviceResponse&gt;<br />
客户端配置:<br />
1.过滤器CAS Validation Filter：<br />
&lt;filter&gt;<br />
&nbsp; &lt;filter-name&gt;CAS Validation Filter&lt;/filter-name&gt;<br />
&nbsp; &lt;filter-class&gt;<span style="color: red;"> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</span>&lt;/filter-class&gt;<br />
&nbsp; &lt;init-param&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-name&gt;casServerUrlPrefix&lt;/param-name&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;param-value&gt;http://domainserver:8081/cas&lt;/param-value&gt;<br />
&nbsp; &lt;/init-param&gt;<br />
&lt;/filter&gt;<br />
在客户端获取信息<br />
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();<br />
String loginName = principal.getName();//获取用户名<br />
Map&lt;String, Object&gt; attributes = principal.getAttributes();<br />
if(attributes != null) {<br />
&nbsp;System.out.println(attributes.get("userId"));<br />
&nbsp;System.out.println(attributes.get("passwordHint")); <br />
}</p>
<p>&nbsp;</p>
<p><br />
&nbsp;<br />
</p>
<img src ="http://www.blogjava.net/tufanshu/aggbug/343290.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2011-01-21 10:06 <a href="http://www.blogjava.net/tufanshu/archive/2011/01/21/343290.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JForum 的 SSO集成的问题解决</title><link>http://www.blogjava.net/tufanshu/archive/2008/06/26/210852.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Thu, 26 Jun 2008 08:54:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2008/06/26/210852.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/210852.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2008/06/26/210852.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/210852.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/210852.html</trackback:ping><description><![CDATA[关于JForum论坛的基本情况就不在此介绍了，官方网址：www.jforum.net.jforum论坛系统的安装也很简单，按照官方文档，或者google一下，基本都可以搞定，在此就不在介绍了。大概描述一下我使用jforum的情况：<br />
1.应用服务器：weblogic8.1<br />
2.数据库：oracle10g<br />
3.已有一个电子商务网站，需要和jforum进行简单的集成，提供sso（单点登录的功能）。<br />
4.说明：已有的电子商务网站域名：http://www.123.com jforum域名：www.123.com/forum,电子商务网站和jfroum在统一台服务器和同一应用服务器下，如果分开可能会存在session或cookie访问的问题。<br />
5.JForum版本：2.1.8<br />
下面简要的介绍一下使用cookie进行jforum和电子商务网站的sso集成的过程：<br />
(1)实现net.jforum.sso接口<br />
<span style="font-size: 8pt;"><span style="font-family: Verdana;">public class CookieUserSSO implements SSO {<br />
&nbsp;&nbsp;&nbsp; static final Logger&nbsp; logger&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = Logger.getLogger(CookieUserSSO.class.getName());<br />
<br />
&nbsp;&nbsp;&nbsp; public String authenticateUser(RequestContext request) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // login cookie set by my web LOGIN application<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getValue(ConfigKeys.COOKIE_NAME_USER));<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String username = null;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (cookieNameUser != null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; username = cookieNameUser.getValue();<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; logger.info("cookie username="+username);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println("cookie username="+username);<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return username; // return username for jforum<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // jforum will use this name to regist database or set in HttpSession<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public boolean isSessionValid(UserSession userSession,<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; RequestContext request) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getValue(ConfigKeys.COOKIE_NAME_USER)); // user cookie<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; String remoteUser = null;<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (cookieNameUser != null) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; remoteUser = cookieNameUser.getValue(); // jforum username<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (remoteUser == null<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; userSession.getUserId() != SystemGlobals<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // user has since logged out<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (remoteUser != null<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; userSession.getUserId() == SystemGlobals<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; .getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // anonymous user has logged in<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } else if (remoteUser != null<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &amp;&amp; !remoteUser.equals(userSession.getUsername())) {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // not the same user (cookie and session)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return true; // myapp user and forum user the same. valid user.<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
}<br />
(2)修改SystemGlobals.properties中的配置：<br />
&nbsp;&nbsp;&nbsp; 修改</span></span><span style="font-size: 8pt;"><span style="font-family: Verdana;">SystemGlobals.properties文件中的一下属性的内容：<br />
&nbsp;&nbsp;&nbsp; authentication.type = sso<br />
&nbsp;&nbsp;&nbsp; sso.implementation = net.jforum.sso.CookieUserSSO<br />
&nbsp;&nbsp;&nbsp; sso.redirect = http://www.123.com/login.jsp //可根据实际的登录页面地址进行修改<br />
<br />
&nbsp;&nbsp;&nbsp; cookie.name.user = 123UserInfo //电子商务网站中保存的cookie名称，可根据实际情况修改<br />
<br />
(3)修改web应用中的登录和注销部分的逻辑：<br />
&nbsp;&nbsp;&nbsp; <strong>登录部分加入以下代码：<br />
&nbsp;&nbsp;&nbsp; </strong></span></span>...<br />
&nbsp;&nbsp;&nbsp; <span style="font-size: 8pt;">Cookie cookie = new Cookie("springTourUserInfo", sname);<br />
&nbsp; &nbsp;&nbsp; cookie.setMaxAge(-1);<br />
&nbsp; &nbsp;&nbsp; cookie.setPath("/");//cookie只在同一应用服务器有效<br />
&nbsp; &nbsp;&nbsp; response.addCookie(cookie);</span><br />
&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; <span style="font-size: 8pt;"><strong>注销部分加入以下代码：</strong></span><strong></strong><br />
&nbsp;&nbsp;&nbsp; ......<br />
&nbsp;&nbsp;&nbsp; &nbsp; <span style="font-size: 8pt;">Cookie cookie = new Cookie("springTourUserInfo", "");<br />
&nbsp; &nbsp;&nbsp;&nbsp; cookie.setMaxAge(0); // delete the cookie.<br />
&nbsp; &nbsp;&nbsp;&nbsp; cookie.setPath("/");<br />
&nbsp; &nbsp;&nbsp;&nbsp; response.addCookie(cookie);</span> <br />
&nbsp;&nbsp;&nbsp; ......<br />
<span style="font-size: 8pt;">(4)在电子商务网站增加论坛的链接：<br />
&nbsp;&nbsp;&nbsp; &lt;a href="/forum"&gt;论坛&lt;/a&gt;<br />
<br />
基本配置完整，测试通过，如有问题，欢迎交流！<br />
<br />
感谢网友提供的资料：<br />
http://www.lifevv.com/java/doc/20080305224358885.html?page=0<br />
http://www.99inf.net/SoftwareDev/Java/54230.htm（作者：王保政）<br />
<br />
</span><br />
<span style="font-size: 8pt;"><span style="font-family: Verdana;">&nbsp;&nbsp;&nbsp; <br />
</span></span><br />
<img src ="http://www.blogjava.net/tufanshu/aggbug/210852.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2008-06-26 16:54 <a href="http://www.blogjava.net/tufanshu/archive/2008/06/26/210852.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>apache2.2.6+tomcat5.5.17配置说明</title><link>http://www.blogjava.net/tufanshu/archive/2007/12/24/170126.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Mon, 24 Dec 2007 10:03:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2007/12/24/170126.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/170126.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2007/12/24/170126.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/170126.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/170126.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;"><span style="font-size: 10pt;"><span style="font-family: Verdana;">同样，经过不断的摸索和网友的帮助，终于搞定了：），主要的问题还是出在我的服务器上的原因，不知道为什么，我的服务器上部署了sqlite3.0导致apache2.2.6始终无法运行，总是提示找不到"libsqlite3.so.0",不得以，只能换台服务器测试，轻松搞定，现将过程描述如下，一共参考：<br />
一.安装apache2.2.6<br />
&nbsp;&nbsp;&nbsp; 1.&nbsp;&nbsp;&nbsp; tar fvxz httpd-2.2.2.tar.gz<br />
&nbsp;&nbsp;&nbsp; 2.&nbsp;&nbsp;&nbsp; 进入解压后的目录。进行配置：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./configure --prefix=/usr/apache --enable-module=so --enable-proxy --enable-proxy-ajp --enable-forward &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; --enable-proxy-connect --enable-proxy-http --enable-so --enable-deflate --enable-headers --enable-include<br />
&nbsp;&nbsp;&nbsp; 解释：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- prefix=/usr/apache是配置将要安装到的目录位置；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --enable-module=so配置Apache支持Dynamic Shared Objects (DSO)模式;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --enable-* 配置添加相应的模块;<br />
&nbsp;&nbsp;&nbsp; 3.&nbsp;&nbsp;&nbsp; 编译（编译如果不成功，确认一下你的linux是否安装有编译所需要的c环境和其他需要的类库）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make<br />
&nbsp;&nbsp;&nbsp; 4.&nbsp;&nbsp;&nbsp; 安装：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; make install<br />
&nbsp;&nbsp;&nbsp; 5.&nbsp;&nbsp;&nbsp; 编辑/usr/apache/conf/httpd.conf文件，把端口改为80（别跟tomcat的端口冲突）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServerName:80<br />
二、安装tomcat5.5.17<br />
&nbsp;&nbsp;&nbsp; 直接解压压缩包到指定目录就可以，再次就不多少说了（当然，最好在进行以上两项操作前先按装好jdk，1.5或以上版本）<br />
三、简单的apche2.2.6+tomcat5.5.17配置说明：<br />
&nbsp;&nbsp;&nbsp; 使用</span></span>使用proxy_ajp整合apache和tomcat，由于Apache2.2对以往版本有较大改动,引进了proxy
模块,所以Apache2.2和Tomcat5.5的配置需要用到mod_proxy.so等文件(不再使用jk 或 jk2 等tomcat连接器)
.基本配置如下:<br />
(一)加载解析模块<br />
&nbsp;&nbsp;&nbsp;
windows下，或linux采用动态加载(DSO)模式下需配置。前面我们的linux编译时把下面的模块嵌入到了&nbsp;&nbsp;&nbsp; apache中，所以不用再加载，因此下面的两行也不用再httpd.conf文件中添加了<br />
&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; LoadModule proxy_module modules/mod_proxy.so<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; LoadModule proxy_ajp_module
modules/mod_proxy_ajp.so<br />
(二)使用proxy_ajp代理, 下面的配置，是把所有目录全用代理<br />
&nbsp;&nbsp; &nbsp; 使用vi编辑器打开apache的配置文件/conf/httpd.conf,在#LoadModule&#215;&#215;&#215;&#215;&#215;&#215;行的后面添加&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 以下两行即可：<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; ProxyPass / ajp://127.0.0.1:8009/<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ProxyPassReverse /
ajp://127.0.0.1:8009/<br />
(三)禁止使用proxy_ajp代理的目录：<br />
&nbsp;&nbsp;&nbsp;&nbsp;
如果对于某些目录不想使用proxy_ajp代理转发，可以按照如下配置（配置方式同上面（二）的操&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 作）：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ProxyPass /images/ !&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
（禁止images目录下的内容使用proxy_ajp代理转发）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
配置到现在，重启一下apache，就可通过apache来访问tomcat的服务了。<br />
<br />
特别鸣谢：http://groups.csdn.net/Apache/topic/b70ad273-f66f-4699-83c0-e11d354d262a.aspx<br />
<br />
</span>
<img src ="http://www.blogjava.net/tufanshu/aggbug/170126.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2007-12-24 18:03 <a href="http://www.blogjava.net/tufanshu/archive/2007/12/24/170126.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>找不到C.TLD的问题</title><link>http://www.blogjava.net/tufanshu/archive/2006/12/04/85371.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Mon, 04 Dec 2006 07:27:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2006/12/04/85371.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/85371.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2006/12/04/85371.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/85371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/85371.html</trackback:ping><description><![CDATA[在部署roller3.0的源代码的时候，每次启动tomcat后访问首页的时候就报错，提示找不到c.tld,但是standard.jar和jstl.jar都以放到lib目录下了，郁闷之极，最后发现是因为在lib下放了一个jsp-api.jar的包导致的<br />，只要将该包从lib下移除即可了，在此感谢网络上不吝赐教的朋友们：）<img src ="http://www.blogjava.net/tufanshu/aggbug/85371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2006-12-04 15:27 <a href="http://www.blogjava.net/tufanshu/archive/2006/12/04/85371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>roller2.3源代码部署笔录</title><link>http://www.blogjava.net/tufanshu/archive/2006/11/01/78479.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Wed, 01 Nov 2006 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2006/11/01/78479.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/78479.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2006/11/01/78479.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/78479.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/78479.html</trackback:ping><description><![CDATA[
		<p>1.首先是去下载rller2.3的源代码文件，下载地址：<a href="http://rollerweblogger.org/">http://rollerweblogger.org/</a><br />由于roller采用了xdoclet，所以在下载的源代码中有些内容是没有的，主要缺少的内容如下：<br />   (1)package org.roller.presentation.forms<br />   (2)src下缺少相关的<font face="Times New Roman, serif">hbm</font>文件<br />   (3)<font face="Times New Roman, serif">version.properties</font><br />   (4)roller.tld<br />2.由于缺少以上的东西，导致源代码导入工程后，编译都不能通过。我不是太懂xdoclet的使用，所以只好缺什么，就给他什么了，尽量满足他的要求了。在roller-src（roller2.3解压后的文件）下有ant的脚本，所以我猜想，通过脚本，一定可以生成所有缺少的文件，事实也确实如此，只是在使用ant脚本生成roller web的过程也是坎坷的：），主要是应为roller开发小组为了省事，把一些开源的第三方包给去掉了，所以需要自己给补上。不然就会生成不成功。现记录如下：<br />(1)加上hibernate3.2.1.jar<br />      在/roller/src/tools目录下建立/hibernate-3.1/lib文件夹，将hibernate3.jar文件copy到该目录下面<br />(2)加上j2ee.jar<br />    将j2ee.jar(或jboss-j2ee.jar)copy到/roller-src/tools/buildtime/xdoclet-1.2.3/文件夹下<br />(3)添加javamail的相关包：mail.jar,actiivation.jar<br />   将mail.jar,activation.jar copy到/roller-src/tools/lib目录下面。<br />然后在windows下进入roller-src目录，使用下面命令即可生成roller web,同时可以生成以上缺省的文件：<br /><br />&gt; build all<br />然后就可以在roller-src/build目录寻找你需要的文件，同时也有发布好的roller web了<br /><br /><br />roller2.3的安装发布可以参考roller官方发布的安装文档即可。<br /><br />大功告成，可以开始学习和修改roller2.3的源码了！：）</p>
<img src ="http://www.blogjava.net/tufanshu/aggbug/78479.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2006-11-01 15:28 <a href="http://www.blogjava.net/tufanshu/archive/2006/11/01/78479.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>tomcat 服务器抛出socket异常“文件打开太多”的问题</title><link>http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Mon, 31 Jul 2006 03:39:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/60981.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/60981.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/60981.html</trackback:ping><description><![CDATA[最近，运行的tomcat服务器在正常运行将近2个月后，抛出如下错误：<br /><br />警告: Reinitializing ServerSocket<br />2006-7-28 15:07:40 org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket<br />严重: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=80] ignored exception: java.net.SocketException: Too many open files<br />java.net.SocketException: Too many open files<br /> at java.net.PlainSocketImpl.socketAccept(Native Method)<br /> at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)<br /> at java.net.ServerSocket.implAccept(ServerSocket.java:450)<br /> at java.net.ServerSocket.accept(ServerSocket.java:421)<br /> at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)<br /> at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)<br /> at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)<br /> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)<br /> at java.lang.Thread.run(Thread.java:595)<br /><br />原本以为是tomcat的配置或是应用本身的问题，"谷歌"一把后才发现，该问题的根本原因是由于系统文件资源的限制导致的。具体可以参考<a href="http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html">http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html</a><br />的说明。具体的解决方式可以参考一下：<br />1。ulimit -a 查看系统目前资源限制的设定。<br />   [root@test security]# umlimit -a <br />-bash: umlimit: command not found<br />[root@test security]# ulimit -a<br />core file size        (blocks, -c) 0<br />data seg size         (kbytes, -d) unlimited<br />file size             (blocks, -f) unlimited<br />max locked memory     (kbytes, -l) unlimited<br />max memory size       (kbytes, -m) unlimited<br /><font color="#ff3300">open files                    (-n) 1024<br /></font>pipe size          (512 bytes, -p) 8<br />stack size            (kbytes, -s) 8192<br />cpu time             (seconds, -t) unlimited<br />max user processes            (-u) 7168<br />virtual memory        (kbytes, -v) unlimited<br />[root@test security]# <br />通过以上命令，我们可以看到open files 的最大数为1024<br />那么我们可以通过一下命令修改该参数的最大值<br />2. ulimit -n 4096<br />[root@test security]# ulimit -n 4096<br />[root@test security]# ulimit -a<br />core file size        (blocks, -c) 0<br />data seg size         (kbytes, -d) unlimited<br />file size             (blocks, -f) unlimited<br />max locked memory     (kbytes, -l) unlimited<br />max memory size       (kbytes, -m) unlimited<br /><font color="#ff3300">open files                    (-n) 4096<br /></font>pipe size          (512 bytes, -p) 8<br />stack size            (kbytes, -s) 8192<br />cpu time             (seconds, -t) unlimited<br />max user processes            (-u) 7168<br />virtual memory        (kbytes, -v) unlimited<br /><br />这样我们就修改了系统在同一时间打开文件资源的最大数，基本解决以上问题。<br /><br />另外我们可以通过lsof  -p [进程的 pid]来查看系统当前打开的文件资源，可以了解不同时期系统的文件资源的使用情况，可根据情况进行系统资源的配置。<br /><img src ="http://www.blogjava.net/tufanshu/aggbug/60981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2006-07-31 11:39 <a href="http://www.blogjava.net/tufanshu/archive/2006/07/31/60981.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hsql的使用</title><link>http://www.blogjava.net/tufanshu/archive/2005/12/26/25499.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Mon, 26 Dec 2005 13:44:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2005/12/26/25499.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/25499.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2005/12/26/25499.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/25499.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/25499.html</trackback:ping><description><![CDATA[<P>最近在一个充值平台上使用了HSQL来记录用户的充值记录,本来所有的记录是写到文件里面的,但是由于使用ORACLE的惯性思维导致我浪费了半天的时间.具体情况是这样:<BR>我使用的是HSQL的IN-PROCESS(Standalone)模式,这样在WEB启动的时候,我就会去创建数据库,按照HSQL的文档,如果存在&lt;dbname&gt;.script文件的话,数据库就会将历史数据插入到数据库中,但是在这里我放了一个惯性的错误,我们在ORCALE或是其他的常用数据库中创建表时,一般要先删除就表,让后在创建新的表,这样我就把HSQL的历史记录都删除了,郁闷啊,这可是用户的充值记录啊,以后我怎么对帐啊,:)还好我有备份.<BR>在HSQL更本不需要这样的操作,他自己会去做这样的事情:如果&lt;dbname&gt;.script存在,他就直接执行了这个script,如果没有他才回去创建新的数据库和表结构.</P><img src ="http://www.blogjava.net/tufanshu/aggbug/25499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2005-12-26 21:44 <a href="http://www.blogjava.net/tufanshu/archive/2005/12/26/25499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jdk1.4升级到JDK1.5的问题</title><link>http://www.blogjava.net/tufanshu/archive/2005/11/17/20309.html</link><dc:creator>雪地孤鸿</dc:creator><author>雪地孤鸿</author><pubDate>Thu, 17 Nov 2005 12:28:00 GMT</pubDate><guid>http://www.blogjava.net/tufanshu/archive/2005/11/17/20309.html</guid><wfw:comment>http://www.blogjava.net/tufanshu/comments/20309.html</wfw:comment><comments>http://www.blogjava.net/tufanshu/archive/2005/11/17/20309.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/tufanshu/comments/commentRss/20309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tufanshu/services/trackbacks/20309.html</trackback:ping><description><![CDATA[<P>最近将手上的项目(tomcat5.0+spring+struts)的jdk1.4升级到1.5的时候,出现了一堆的问题,经过不懈的努力和网上朋友的提示终于将问题解决了,现在记录如下<BR>1.java.lang.UnsupportedClassVersionError: com/mdcchina/userinfo/logic/UserManager (Unsupported major.minor version 49.0)提示如上的错误,很是郁闷<BR>经过研究和比较在两个不同环境下的编译运行,终于发现这个主要是由于我的机子上安装了两个不同版本的JDK导致的,我想很多的朋友在尝试新的JDK的时候,可能不会删除1.4的版本,但是要注意的是要将JAVA_HOME,CLASS_PATH,PATH等等的环境变量都修改成相关的JDK1.5的目录下面去,因为1.5相对于以前的版本的变化比较大.<BR>2.上面的问题排除后,在运行TOMCAT5.0时候由出现了如下的错误:<BR>2005-11-17 19:38:47 StandardWrapperValve[action]: Servlet.service() for servlet action threw exception<BR>org.apache.jasper.JasperException: Unable to compile class for JSP</P>
<P>Generated servlet error:<BR>C:\application\Tomcat 5.0\work\Catalina\localhost\mlinkweb\org\apache\jsp\layouts\layout_005findex_jsp.java:7: cannot access java.lang.Object</P>
<P><BR>Generated servlet error:<BR>bad class file: C:\application\Java\jdk1.5.0\jre\lib\rt.jar(java/lang/Object.class)<BR>class file has wrong version 49.0, should be 48.0<BR>Please remove or make sure it appears in the correct subdirectory of the classpath.<BR>public final class layout_005findex_jsp extends org.apache.jasper.runtime.HttpJspBase<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ^<BR>1 error<BR><BR>这个问题这是让我郁闷之极啊(^_^)<BR>最后在SUN的JAVA论坛里面找到了答案,只要将JDK1.5的LIB下面的TOOLS.JAR覆盖TOMCAT5.0目录/common/lib下面的tools.jar,然后重启TOMCAT5.0就可以了</P><img src ="http://www.blogjava.net/tufanshu/aggbug/20309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tufanshu/" target="_blank">雪地孤鸿</a> 2005-11-17 20:28 <a href="http://www.blogjava.net/tufanshu/archive/2005/11/17/20309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>