posts - 37,  comments - 53,  trackbacks - 0
  2005年11月17日
grails应用以war包的方式发布到weblogic本来应该是没有什么问题的,也不需要像网上说的那样进行weblogic的配置,但是有两个小问题在实际的使用中需要注意:
1.我的应用中,使用了spring-security-cas的插件来实现cas client,但是不知道为什么在生产war包是,在web.xml中,有两个CAS Single Sign Out Filter的mapping,结果导致发布失败,需要手工删除一个(目前的解决办法)
2.grails的urlmapping插件,如果映射“/”到某个action,目前好像是不成功的,但是只要不是“/”,则没有这个问题。如果默认的根目录不是index.gsp,这个可能需要在访问“/”时进行跳转的处理。

posted @ 2011-02-09 16:21 雪地孤鸿 阅读(508) | 评论 (0)编辑 收藏
1.weblogic必须是10.3.4.0或以上版本,由于cas server采用了spring 2.5的版本,使用JPA2.0的原因,weblogic10.3.4之前的版本不支持jpa2.0
2.cas server webapp 如果以war的方式发布,会因为log4j.xml的问题而不能正常发布,具体原因还没有完全弄清楚,但是如果以解开后的文件夹目录的方式发布则没有问题。

posted @ 2011-02-09 16:16 雪地孤鸿 阅读(3240) | 评论 (2)编辑 收藏
测试环境下使用的是mysql数据库,切换到正式的oralce数据库中去发现cas server是无效的,主要的原因是由于数据库的差异导致的
认证用户的sql语句在mysql下为
select password from user_login where username=? and enabled=true
而在oracle下应该为
select password from user_login where username=? and enabled=1
主要由于oralce和mysql对boolean字段的处理不一致导致的。

posted @ 2011-01-26 09:05 雪地孤鸿 阅读(699) | 评论 (0)编辑 收藏

cas server logout后,默认是停留在cas的退出页面,一般我们需要重新转向到客户端网站的登录或是相关的页面,一般需要进行一下配置

1.cas-server端,配置文件为/WEB-INFO/cas-servlet.xml中的logoutController

 <bean id="logoutController" class="org.jasig.cas.web.LogoutController" 
     p:centralAuthenticationService-ref="centralAuthenticationService" 
     p:logoutView="casLogoutView" 
     p:warnCookieGenerator-ref="warnCookieGenerator" 
     p:ticketGrantingTicketCookieGenerator-ref="ticketGrantingTicketCookieGenerator"   
      p:followServiceRedirects="true"/>

posted @ 2011-01-21 13:38 雪地孤鸿 阅读(1032) | 评论 (1)编辑 收藏

经过将近两天的测试,参考众多网友的贡献,终于完成了对cas的主要配置和测试,现记录如下

基本需求:

1.cas server-3.4.5,casclient-3.2(官方版本),均可在cas官方网站下载,http://www.jasig.org

2.使用低成本的http协议进行传输,俺买不起ssl证书

3.通过jdbc进行用户验证

4.需要通过casserver提供除登录用户名以外的附加信息

参考资料:

1.cas官方网站的用户帮助手册和wiki

2.网友“城市猎人”的blog,http://yuzhwe.javaeye.com/blog/830143

3.网友“悟空悟道”的blog,http://llhdf.javaeye.com/blog/764385

4.其他网友贡献的相关的blog,都是通过google出来,就不一一列出了,一并致谢!!!

好了,下面进入正题,如果您不想测试中出现异常情况,或是获取不到相关数据,请关注文中的红色字体部分。

(1)使用http协议的设置,如果您也像我一样,买不起ssl数字证书,对安全的要求也不是特别的搞,下面的配置就可以帮助解决这个问题:

在cas-server-webapp中的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml文件中有如下配置

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
  p:cookieSecure="true"     //默认为true,使用https,如果只需要http,修改为false即可
  p:cookieMaxAge="-1"
  p:cookieName="CASTGC"
  p:cookiePath="/cas" />

 (2)使用jdbc数据源进行用户认证,需要修改cas的authenticationHandlers方式,在文件/WEB-INF/deployerConfigContext.xml有如下配置:

<property name="authenticationHandlers">
   <list>
    <!--
     | This is the authentication handler that authenticates services by means of callback via SSL, thereby validating
     | a server side SSL certificate.
     +-->
    <bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
     p:httpClient-ref="httpClient" />
    <!--
     | This is the authentication handler declaration that every CAS deployer will need to change before deploying CAS
     | into production.  The default SimpleTestUsernamePasswordAuthenticationHandler authenticates UsernamePasswordCredentials
     | where the username equals the password.  You will need to replace this with an AuthenticationHandler that implements your
     | local authentication strategy.  You might accomplish this by coding a new such handler and declaring
     | edu.someschool.its.cas.MySpecialHandler here, or you might use one of the handlers provided in the adaptors modules.
     +-->
    <!--<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />-->
     <bean  class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
         <property name="dataSource" ref="dataSource" />
        
<property name="sql" value="select password from userInfo where username=? and enabled=true" />
         //用户密码编码方式

         <property name="passwordEncoder"
           ref="passwordEncoderBean"/>
         </bean>  
   </list>
  </property>

该属性中的list只要用一个认证通过即可,建议将红色部分放在第一位,如果确认只用jdbc一种方式,其他认证方式均可删除。另外需要在在文件中添加datasoure和passordEncoder两个bean,如下

<!-- Data source definition -->
 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName">
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
    <value>jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=utf-8</value>    //如果使用mysql数据库,应该加上后面的编码参数,否则可能导致客户端对TGT票据无法识别的问题
  </property>
  <property name="username"><value>root</value></property>
  <property name="password"><value>password</value></property>
 </bean>
 <bean id="passwordEncoderBean" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder">
        <constructor-arg value="SHA1" />  //cas
server默认支持MD5和SHA1两种编码方式,如果需要其他的编码方式例如SHA256,512等,可自行实现org.jasig.cas.authentication.handler.PasswordEncoder接口
    </bean>

附加备注:如果您是使用cas server的源码自行编译的话,需要在cas-server-web模块的pom.xml中添加如下模块的依赖:

<dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>cas-server-support-jdbc</artifactId>
       <version>${project.version}</version>
  </dependency>  

并添加对应数据库的jdbc的jar包。

(3)让cas server提供更多的用户数据共客户端使用

通过测试,由于cas的代码更新过程中的变化较大,所以包兼容的问题好像一直存在,在测试中我就碰到过,花费时间比较多,建议同学们在使用过程中使用官方的最新的发布版本。在我使用的这个版本中,请参考前面的关于server和client端的版本说明,应该没有包冲突的问题,测试通过。下面进行配置,配置文件:/WEB-INF/deployerConfigContext.xml
<property name="credentialsToPrincipalResolvers">
   <list>
       <!--<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />-->
    <!-- modify on 2011-01-18,add user info -->
    <bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" >
      <property name="attributeRepository" >   //为认证过的用户的Principal添加属性
      <ref local="attributeRepository"/>
     </property> 
    </bean>
      <bean
     class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />
   </list>
  </property>
 修改该文件中默认的 attributeRepositorybean配置
<!-- 在这里配置获取更多用户的信息 -->
 <bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
  <constructor-arg index="0" ref="dataSource" />
  <constructor-arg index="1" value="select id as UId, password_hint as ph from userInfo where username=? and enabled=true" />
  <property name="queryAttributeMapping">
   <map>
   <entry key="username" value="uid"/><!-- 这里必须这么写,系统会自己匹配,貌似和where语句后面的用户名字段的拼写没有什么关系 -->
   </map>
  </property>
   <!-- 要获取的属性在这里配置 -->
  <property name="resultAttributeMapping">
   <map>
   <entry key="UId" value="userId" /> //key为对应的数据库字段名称,value为提供给客户端获取的属性名字,系统会自动填充值
   <entry key="ph" value="passwordHint" />   
   </map>
  </property>
</bean> 
备注:网上有很多的关于这个的配置,但是如果您使用的是我提供的版本或是高于这个版本,就应该象上面这样配置,无用质疑,网上大部分的配置都是基于
person-directory-impl,person-directory-api
1.1左右的版本,而最新的cas使用的是1.5的版本,经过查看源代码和api docs确定最新版本的属性参数如上配置。

修改该xml文件中最后一个默认的serviceRegistryDao bean中的属性全部注释掉,或者删除,
这个bean中的RegisteredServiceImpl的ignoreAttributes属性将决定是否添加attributes属性内容,默认为false:不添加,只有去掉这个配置,
cas server才会将获取的用户的附加属性添加到认证用的Principal的attributes中去,我在这里犯过这样的错误,最后还是通过跟踪源码才发现的。
<bean
  id="serviceRegistryDao"
        class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
        <!--
            <property name="registeredServices">
                <list>
                    <bean class="org.jasig.cas.services.RegisteredServiceImpl">
                        <property name="id" value="0" />
                        <property name="name" value="HTTP" />
                        <property name="description" value="Only Allows HTTP Urls" />
                        <property name="serviceId" value="http://**" />
                    </bean>

                    <bean class="org.jasig.cas.services.RegisteredServiceImpl">
                        <property name="id" value="1" />
                        <property name="name" value="HTTPS" />
                        <property name="description" value="Only Allows HTTPS Urls" />
                        <property name="serviceId" value="https://**" />
                    </bean>

                    <bean class="org.jasig.cas.services.RegisteredServiceImpl">
                        <property name="id" value="2" />
                        <property name="name" value="IMAPS" />
                        <property name="description" value="Only Allows HTTPS Urls" />
                        <property name="serviceId" value="imaps://**" />
                    </bean>

                    <bean class="org.jasig.cas.services.RegisteredServiceImpl">
                        <property name="id" value="3" />
                        <property name="name" value="IMAP" />
                        <property name="description" value="Only Allows IMAP Urls" />
                        <property name="serviceId" value="imap://**" />
                    </bean>
                </list>
            </property>-->
           </bean>

 修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp文件,如下:

<%@ page session="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
 <cas:authenticationSuccess>
  <cas:user>${fn:escapeXml(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.id)}</cas:user>
  <c:if test="${not empty pgtIou}">
   <cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
  </c:if>
  <c:if test="${fn:length(assertion.chainedAuthentications) > 1}">
   <cas:proxies>
    <c:forEach var="proxy" items="${assertion.chainedAuthentications}"
     varStatus="loopStatus" begin="0"
     end="${fn:length(assertion.chainedAuthentications)-2}" step="1">
     <cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
    </c:forEach>
   </cas:proxies>
  </c:if>
   <c:if
   test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)

>
0}">
   <cas:attributes>
    <c:forEach
var="attr"
     items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}"
     varStatus="loopStatus"
begin="0"
     end="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes)-1}"
     step="1">
     <cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
    </c:forEach>
   </cas:attributes>
  </c:if>
 </cas:authenticationSuccess>
</cas:serviceResponse>
客户端配置:
1.过滤器CAS Validation Filter:
<filter>
  <filter-name>CAS Validation Filter</filter-name>
  <filter-class> org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>
  <init-param>
    <param-name>casServerUrlPrefix</param-name>
    <param-value>http://domainserver:8081/cas</param-value>
  </init-param>
</filter>
在客户端获取信息
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();
String loginName = principal.getName();//获取用户名
Map<String, Object> attributes = principal.getAttributes();
if(attributes != null) {
 System.out.println(attributes.get("userId"));
 System.out.println(attributes.get("passwordHint"));
}

 


 

posted @ 2011-01-21 10:06 雪地孤鸿 阅读(15865) | 评论 (9)编辑 收藏
最近在使用G2G做项目,开发环境的数据库为Mysql,在使用grails的分页组件时没有任何问题,但是将数据库切换到ORACLE上就出现了问题,在分页的时候,记录总数是对了的,但在进行翻页的时候,总会有前一页的数据存在,而当前的数据总是显示不对,经过将近一天的仔细排查才找到问题的关键,主要是由于数据库的差异引起的,由于的我的查询不需要进行排序,所以在原来的查询结果中没有就排序语句,这就导致在mysql中完全正常的功能,到了oralce中每次查询的排序不一致,结果就导致在翻页的时候总有前一页的数据存在,可能是由于数据库的引擎规则的不一致导致的。
再次记下!

posted @ 2010-12-13 11:15 雪地孤鸿 阅读(706) | 评论 (0)编辑 收藏
   今天早上出来给老婆大人买早点,骑着老婆大人的小车,在路上奔驰,突然一种思绪飞入脑中,想想自己也是三十多岁的人了,却是一事无成。我本IT出生,参加工作以来,却一直徘徊在IT技术的和行业解决方案之间摇摆,最后终于下定决心朝着行业解决方案的方向发展,却选择了一个旅游行业,虽说春秋在国内也算的上不错的旅游公司,但这个行业确实乱象丛生。该公司在信息化方面更是不知所谓,早三暮四。虽然我不应该对公司说三道四,但还是忍不住要说两句。算了,这个都是我个人的抉择,我现在是IT技术方面没有什么看家的本事,行业知识也没有什么,长此以往,很是危险,随着年龄的增长,抗风险能力会越来月差,我必须要重新的思考和抉择,不然真的要落的老婆大人预见的场景了,我自己不甘心这样,也 不能让老婆看扁啊。行业的解决方案肯定是我的房展方向,是继续在这个行业发展,还是重新挑选行业,这是个比较重要的决定,但是不管怎么样,我的老本行--IT技术也支撑不了几年了,我必须要反省,深思我过去的规划和执行,重新规划和执行,努力的保障家庭幸福的经济基础,开拓新的事业。
今天在这里写下如此的只言片语,就是为了鞭策自己,不能让自己在被短期的利益而动摇长期的规划和执行,年纪也不小了,还没有一个像样的事业,以后的风险会越来越大。
posted @ 2010-05-03 10:35 雪地孤鸿| 编辑 收藏
最近在试用Grails进行开发一个小项目,需要使用oracle数据库,我使用的是Oracle 11g,简单的配置如下:
1.添加jdbc lib到Grails项目的lib中,我使用的是ojdcb6_g.jar
2.修改grails生成项目的DataSource.groovy文件中关于DataSource的相关配置:关键点是关于hibernate方言的配置,由于grails默认使用的是HSQL内存数据库,推荐使用的是mysql数据库;但是在使用oracle数据库时,需要配置hiernate的方言;其他的如URL,drive,username,password等配置和一般的配置没有什么区别,详细配置如下:
dataSource {
    pooled = true
    driverClassName = "oracle.jdbc.OracleDriver"
    username = "paygateway"
    password = "paygateway"
    dialect = "org.hibernate.dialect.OracleDialect"
       
    logSql = true
}


posted @ 2010-03-19 13:38 雪地孤鸿 阅读(1992) | 评论 (1)编辑 收藏
公司刚刚买了一台Thinkpad R400(7445-A63),预装的vista home basic版本,由于第一次使用thinkpad系列,只是制作了一个start Recovery Disk盘,忘了制作系统恢复光盘,晕倒,不知道联想能否免费提供哦,那可是俺花银子买的阿。当时急着想试用一下win7(当然是盗版的),所以就把硬盘格掉了,后来想恢复的时候已经晚了,因为我没有win7的序列号,没有办法,只能重回xp时代了。
   由于硬盘是sata的,安装过程很是郁闷,开始都引导不了,后来狠狠的google一把,终于搞定了:
  1.进入BIOS-》CONIF,将硬盘的模式修改为compatibility,原来为ACHI
  2.到联想的官方网站,现在相关xp的驱动(http://think.lenovo.com.cn),网友提供列表如下;我是全部打包下载了:)
     安装主板芯片组驱动(Intel Chipset Drivers)
安装硬盘SATA驱动(Intel Matrix Storage Manager)
安装ACPI电源驱动,即Power Manager Driver
安装Lenovo System Interface Driver
启动系统,系统安装显卡驱动
安装网卡驱动
安装无线驱动
如果此系统安装为XP2的系统,那么要安装MODOM和声卡的前提是安装读卡器(也有人叫HD总线)补丁: KB888111XPSP2.EXE;
安装声卡驱动和补丁
安装猫驱动
安装蓝牙驱动
安装读卡器驱动
安装智能读卡器驱动
安装指纹驱动        
安装PCI简易通讯控制器,也就是AMT(INTEL的主动管理技术
安装TPM安全芯片的驱动程序
安装摄像头驱动和补丁:7yca02ww.exe,Q909667.rar。
安装微软双核补丁和其他补丁:KB896256.exe, KB936357.exe, schedulerupdater.exe。
安装UltraNav driver
安装UltraNav Utility

3.驱动安装完成后,重启机器,进入BIOS,将硬盘模式修改回原来的ACHI模式

4.不知到何时能用上正中的win7盗版,感觉还是不错,虽然我平时已经不太用win系统了。:)


posted @ 2009-12-20 11:25 雪地孤鸿 阅读(1547) | 评论 (2)编辑 收藏
ofbiz默认的数据库为derby,这个当然不能在生产环境中使用,而且也不方便调试和管理。虽然ofbiz也支持很多的开源数据库,例如mysql等,但是我们这里还是使用主流的数据库系统oracle 11g.详细的操作如下
1.更新JDBC驱动,将oracle最新的jdbc驱动copy到${ofbiz install dir}/framework/entity/lib/jdbc 目录下。
2.设置实体引擎( Entity Engine)的缺省数据库为oracle.在修改 ${ofbiz install dir}/framework/entity/config/entityengine.xml文件中修改配置:
   a.修改数据库连接参数:
     <datasource name="localoracle"
            helper-class="org.ofbiz.entity.datasource.GenericHelperDAO"
            schema-name="ofbiz" 你的数据库schema名称
            field-type-name="oracle"
            check-on-start="true"
            add-missing-on-start="true"
            alias-view-columns="false"
            join-style="ansi">
        <read-data reader-name="seed"/>
        <read-data reader-name="seed-initial"/>
        <read-data reader-name="demo"/>
        <read-data reader-name="ext"/>
        <inline-jdbc
                jdbc-driver="oracle.jdbc.driver.OracleDriver"
                jdbc-uri="jdbc:oracle:thin:@192.168.1.154:1521:ofbiz"  ofbiz为你的数据库SID
                jdbc-username="ofbiz"  用户名
                jdbc-password="ofbiz"  密码
                pool-minsize="2"
                pool-maxsize="250"/>
    </datasource>
  b. 修改实体引擎的数据库缺省配置如下:(将datasource-name的值设置为“localoracle”)
      <delegator name="default" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" distributed-cache-clear-enabled="false">
        <group-map group-name="org.ofbiz" datasource-name="localoracle"/>
        <group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
    </delegator>
    <delegator name="default-no-eca" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main" entity-eca-enabled="false" distributed-cache-clear-enabled="false">
        <group-map group-name="org.ofbiz" datasource-name="localoracle"/>
        <group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
    </delegator>

    <!-- be sure that your default delegator (or the one you use) uses the same datasource for test. You must run "ant run-install" before running "ant run-tests" -->
    <delegator name="test" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main">
        <group-map group-name="org.ofbiz" datasource-name="localoracle"/>
        <group-map group-name="org.ofbiz.olap" datasource-name="localoracle"/>
    </delegator>
    <delegator name="other" entity-model-reader="main" entity-group-reader="main" entity-eca-reader="main">
        <group-map group-name="org.ofbiz" datasource-name="localoracle"/>
    </delegator>
3.补充:在进行以上配置时,请确保你已经存在ofbiz的数据库,实例,用户等都已创建好。
4. 初始化数据和导入:   
     ofbiz$ java -jar ofbiz.jar -install
通过以上命令即可进行数据库的初始化和初始数据的导入,这里包括了ofbiz自带的例子,应用的所有的数据表和初始化数据

5.问题:
在使用oracle数据库时,当前的版本可能会碰到ORA-01843:无效的月份的问题      

    以sys用户登陆并创建Trigger:

    create or replace TRIGGER ON_CONNECT AFTER LOGON ON DATABASE
     DECLARE
     guser varchar2(30);
     begin
      SELECT sys_context('USERENV','SESSION_USER') into guser FROM dual;
         if (guser='ofbiz' or guser='OFBIZ') THEN
            EXECUTE IMMEDIATE 'alter session set nls_timestamp_format = ''YYYY-MM-DD HH24:MI:SS.FF''';
         end if;
     end;

注意对登陆用户名的判断必须大小写都要考虑.

另:ofbiz用户不能拥有dba的权限,同时ofbiz用户比需要有UNLIMITED TABLESPACE的权限,否则在创建数据表的时候会报“数据库空间不足”的错误,导致无法创建表。

6.参考:
http://blog.csdn.net/blieveme/archive/2007/10/16/1826604.aspx
http://docs.ofbiz.org/display/~jacopoc/OFBiz+and+Oracle

今天就到这里吧,明天继续:) 
posted @ 2009-09-03 20:27 雪地孤鸿 阅读(2603) | 评论 (3)编辑 收藏
apache版本2.2
自带mod_deflate.so和mod_headers.so
如果没有这两个模块,那么你就需要手工编译并load这两个模块。
我是在虚拟主机下加入一下配置即可
<Location "/">
SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
Header append Vary User-Agent env=!dont-vary
</Location>

记住,以上配置,需要放到<Directory></Directory>之后,apache官方网站这么说的:)

posted @ 2009-08-26 09:17 雪地孤鸿 阅读(185) | 评论 (0)编辑 收藏
今天发现linux服务器的/目录磁盘使用率为100%,操作如下
主要通过du -sh查找占用磁盘较多的目录
1.清除/var/log下的日志文件
2.清除/var/spool/mail下占用磁盘较多的邮件目录(我的服务上主要是root用户的邮件比较多导致的)

posted @ 2009-07-02 17:25 雪地孤鸿 阅读(4357) | 评论 (0)编辑 收藏

但是scim中文输入不了, 上网找解决方案,最后成功的方法:

sudo apt-get install scim-qtimm 安装scim的qt模块

  • sudo gedit /usr/bin/opera 在文件中加入export QT_IM_MODULE="scim"

启动opera,问题解决。


环境:

ubuntu9.0.4

opera9.6

测试成功

posted @ 2009-05-08 08:59 雪地孤鸿 阅读(273) | 评论 (0)编辑 收藏

鸣谢:http://www.phpma.com/linux/20070908/392.html

Apache日志分析工具--AWStats6.9安装使用
1、事先安装好Apache

2、安装awstats的命令(将awstats安装在/opt/awstats目录)
mkdir -p /var/lib/awstats
cd /opt
wget http://www.awstats.cn/files/awstats-6.6.tar.gz
tar zxvf awstats-6.6.tar.gz
mv awstats-6.6 awstats
cd awstats/tools/
perl awstats_configure.pl

3、Perl脚本awstats_configure.pl安装过程(以下内容引用AWStats英文使用说明)

(1)
-----> Running OS detected: Linux, BSD or Unix
Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'.
If you want to use standard directory, you should first move all content
of AWStats distribution from current directory:
/opt/awstats
to standard directory:
/usr/local/awstats
And then, run configure.pl from this location.
Do you want to continue setup from this NON standard directory [yN] ?

这时选择y回车。

(2)
-----> Check for web server install

Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):

第一次使用请输入Apache的httpd.conf路径,例如/opt/sina/apache/conf/httpd.conf
以后如果再使用perl awstats_configure.pl生成配置文件,则可以输入none跳过。

(3)
-----> Check and complete web server config file '/opt/sina/apache/conf/httpd.conf'
Warning: You Apache config file contains directives to write 'common' log files
This means that some features can't work (os, browsers and keywords detection).
Do you want me to setup Apache to write 'combined' log files [y/N] ?

选择y,将日志记录方式由CustomLog /yourlogpath/yourlogfile common改为更详细的CustomLog /yourlogpath/yourlogfile combined

(4)
-----> Update model config file '/opt/awstats/wwwroot/cgi-bin/awstats.model.conf'
 File awstats.model.conf updated.

-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?

创建一个新的配置文件,选择y

(5)
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
>

输入站点名称,例如sina

(6)
-----> Define config file path
In which directory do you plan to store your config file(s) ?
Default: /etc/awstats
Directory path to store config file(s) (Enter for default):
>

输入AWStats配置文件存放路径,一般直接回车则使用默认路径/etc/awstats

(7)
-----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/opt/awstats/wwwroot/cgi-bin/awstats.pl -update -config=sina
Or if you have several config files and prefer having only one command:
/opt/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...

按回车键继续

(8)
A SIMPLE config file has been created: /opt/awstats/etc/awstats.sina.conf
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'sina' with command:
> perl awstats.pl -update -config=sina
You can also read your statistics for 'sina' with URL:
> http://localhost/awstats/

Press ENTER to finish...

按回车键结束


4、修改awstats.sina.conf配置
vi /etc/awstats/awstats.sina.conf

按?,在之后输入要搜索的内容LogFile="
然后按Ins键,找到LogFile="/var/log/httpd/access_log"
改为要分析的Apache日志路径与文件名。

(1)多日志合并分析(例:新浪播客其中两台服务器2月6日的日志30.0206.vblog.log与31.0206.vblog.log)
LogFile="/opt/awstats/tools/logresolvemerge.pl /var/apachelogs/30.0206.vblog.log /var/apachelogs/31.0206.vblog.log|"

LogFile="/opt/awstats/tools/logresolvemerge.pl /var/apachelogs/*.0206.vblog.log|"

(2)分析使用gzip压缩过的日志文件
LogFile="gzip -d </var/log/apache/access.log.gz|"


5、更新分析报告
perl /opt/awstats/wwwroot/cgi-bin/awstats.pl -config=sina -update


在实践过程中,确实有该问题,只要删除掉历史日志记录即可
如果出现以下错误提示,很大可能是Apache的Log文件中存在以前CustomLog /yourlogpath/yourlogfile common生成的日志,删除掉这些行的日志即可:
This means each line in your web server log file need to have "combined log format" like this:
111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] "GET / HTTP/1.1" 200 1234 "http://www.fromserver.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"

6、查看分析报告
http://localhost/awstats/awstats.pl?config=sina

这里的sina对应/etc/awstats/awstats.sina.conf中的sina

7.awstats自动生成日志分析报告

需要root用户权限,或者可以操作crontab -e命令的用户权限:

(1)键入:crontab -e

(2)输入以下系统定时任务:

0 5 * * *  /opt/awstats/wwwroot/cgi-bin/awstats.pl -config=www.google.com -update

每天凌晨5点执行日志分析报告,opt/awstats/wwwroot/cgi-bin/awstats.pl为awstats安装目录下的perl命令,www.goolge.com为你安装awstats时指定的网站域名。关于crontab命令的用法,可以google一下。

8.awstats基础安全设置

(1)linux系统中必须存在用户,如果不存在可以按以下方式操作

groupadd awsuser     #增加awstats用户组

useradd -g awsuser awstats #增加awstats用户,并归属awsuser用户组

(2)在apache安装目录下新建文件夹

mkdir passwd

(3)运行如下代码产生用户名为awstats用户及其密码

opt/apache/bin/htpasswd -c /opt/apache/passwd/passwords awstats

键入密码和验证密码即可

(4)配置httpd.conf

<Directory "/opt/awstats-6.9/wwwroot"> Options None AllowOverride None Order allow,deny Allow from all AuthType Basic AuthName "Restricted Files" AuthUserFile /usr/local/apache2/password/passwords Require user awsspring </Directory>




附:
(2)测试环境:在DELL PowerEdge 1950/2950 服务器+red hat as 4.6/5.0 as Linux操作系统+Apache 2.2.11下测试通过。

posted @ 2009-04-08 16:54 雪地孤鸿 阅读(1143) | 评论 (0)编辑 收藏
1 . WDG HTML Validator 一个很好的工具,能找出网站语法错误的地方,并标注出来,也可选择对网站上单独的每一页进行单页分析。( 强烈推荐

2 . W3C Markup Validation Service 对 HTML 和 XHTML 都能进行代码测试,自称是互联网络上第一个(也是使用者最多的)的 HTML 验证工具。

3 . W3C CSS Validation Service 用于验证 css 源代码,能够标注出不好的 css 代码设计。例如:“Same colors for color and background-color in two contexts”。

4 . RUWF XML Syntax Checker 用于查找 XML 文件的错误。

5 . W3C Feed Validation Service 用于查找 Atom 和 RSS feed 中的错误语法。( 这个我经常用到

6 . W3C Link Checker 用于搜寻查明你网站内的所有链接里是否有断链。( 强烈推荐

7 . Juicy Studio Link Analyser 测试网站内的链接的 URL 是否存在死链,与 W3C Link Checker 很类似。

网站的使用性

我们常常看到网站设计者把重点放在怎网站的吸引力上,而完全不考虑会不会影响来访者的使用,一个浏览难度很大的网页是注定要失败,要让你的来访者方便的得到他要的信息(从而成为重复访客),你的网站应当遵循 WCAG section 508 易用性规则。

8 . Watchfire WebXACT 所有严谨的设计师和开发者都必须使用的工具,它会生成一个非常详尽的报告书,包括:网站质量,易用性和隐私等。( 强烈推荐

9 . ATRC Web Accessibility Checker 测试网站的 WCAG 2.0 Level2 兼容性,它会生成一份报告,提出一系列建议,如:如何提升页头,链接,数据,图表和文字的访问速度。

10 . WAVE 3.0 Web Accessibility Tool 高度可定制的工具,它采用了图形化模型展示网站兼容性问题( WCAG 1.0 and section 508 )。( 强烈推荐

11 . TAW Web Accessibility Test 测试网页是否存在冲突( WCAG 1.0 兼容性 ),通过图形模式生成一份依据 wcag 优先模式为基础的网站修改建议。

12 . HiSoftware CynthiaSays portal 采用了非常严格的规则来测试网页( 根据 section 508 和 WCAG 1.0 规则 ),生成的报告也极为详细( 详细到很难看懂 )。

13 . HERA Accessibility testing with Style 使用一种极为复杂但容易理解方式指出网页的 wcag1.0 兼容性问题。

14 . Juicy Studio CSS Analyser 进行了色彩对比测试,以确保你的网站的色调会符合 WCAG 1.0 的要求。

15 . Juiciy Studio Readability Test 分析你网站上的文字是否有语法错误或拼写错误等问题,容易让人理解不( 根据 the Flesch Reading Ease 和 Flesch-Kincaid grade level algorithms 规则 )。( 适合英文网站使用 )

网站的速度

打开你的网站的速度快慢,是来访者会不会再次访问网站的关键因素,在一般情况下,一个网络不是很快的来访者是不愿意访问一个充满着图片、flash 动画、多媒体文件的网站。为了使你的网站覆盖人群的范围最大化,你必须优化你的网站,使它的打开速度尽可能的快。

16 . Web Page Analyzer from Website Optimization 一个很好的工具,它在分析完一个网页后,会为减少加载时间提出优化建议,着重优化物体的数目,图片和网站的总体大小。( 强烈推荐

17 . WebSitePulse Test Tools 有一系列的工具来确定网站的加载速度和主机信息。

18 . Internet Supervision Url Check 从世界各地不同的服务器来测试你的网站的加载时间,用于确定是不是各地的来访者都能顺利快速的打开你得网站。

浏览器模拟工具

这是一个普遍的问题,因为现在有着很多的操作系统和浏览器,你得网站必须得兼容它们,但这绝不是一件容易的事。通过下列工具,你可以了解你得网站在各种浏览器上的显示效果。

19 . Browsershots能给出你的网站在不同浏览器下显示效果的截图,包括:Firefox 和 Internet Explorer ( Windows)、Firefox 和 Safari ( Mac OS X )、Iceweasal 和 Konqueror ( Linux ),但是结果要在1 - 3 小时后才能出来。

20 . IE NetRenderer 实时生成你的网站在 Internet Explorer 5.5 、6.0 和 7.0 下的截图。

21 . MobiReady Report 分析使用手机访问网页的兼容性问题,会生成一份详细的报告,并提供了在两种不同类型的手机浏览器上你得网站可能显示的样子。

搜索引擎优化 (SEO)

一个网站,如果对搜索引擎有着比较好的友好度,一定会比较有竞争力。

22 . UrlTrends 会显示网站的访客是如何通过搜索引擎来到你的网站,还有各个流量是多少。这些数据是包括 Google, Yahoo, MSN, Alexa, AlltheWeb, AltaVista 和其他一些网站。( 强烈推荐

23 . iWEBTOOL Backlink Checker 一个很好的工具,它能找出有什么站点链接到你的站点,那些站点是什么类型的站点。

24 . iWEBTOOL Multi-Rank Checker 显示你网站的 Alexa 和 Google PageRank 数值。

25 . Microsoft adCenter Labs: Advertising and Keyword Research Tools 一个极好的工具,用于分析和预测你网站的来访者和市场。( 强烈推荐

26 . Domain Tools Whois lookup 一个 WHOIS 网络工具。

27 . SEO-Browser 可以让你看到在搜索引擎眼里一样的网站( 去掉所有的”美丽”配件 )。

28 . SEO Workers SEO Analysis Tool 非常有用的工具,分析了网站上的各种分类特征,包括 meta 标签、关键字密度及加载时间。( 强烈推荐

29 . Seekport Seekbot 可以分析网站的数据和内容,以得出搜索引擎会如何有效的解释分析的网站。

30 . SEO Chat SEO Tools 用以分析网站 Google adsense 盈利潜力,关键字密度,Meta tag 等等……

31 . Marketleap Search Engine Marketing Tools 用来分析网页,让你知道你的网站检索、设定的关键字好不好。

原文:avivadirectory.com
译者:peterzsk
译文原地址:http://zsk.akaka.com.cn/2007/06/31-free-tests-online/
采用CC创作共用协议,转载可保留以上信息并<署名、非商业和保持一致>。

posted @ 2009-02-18 15:57 雪地孤鸿 阅读(259) | 评论 (0)编辑 收藏
opencrx的大名,我就不介绍了,请参考www.opencrx.com(官方网站)或www.opencrx.com.cn(中文网站),我使用的是opencrx2.1,关于opencrx的安装过程,无论是windows还是linux的安装过程也不需要多说了,官方网站有很好的安装说明文档,图文并茂,很是生动,几乎太会不会安装的了:),但是在启动的过程中,出现了一点小插曲,让我折腾了将近2个小时。下面就详细说明一下:
一、在windows下安装完成openmdxTomcatLwc-2.1.0和opencrx2.1.0之后,桌面上会出现五个快捷方式,双击那个都不会正常的启动opencrx-server  的?关键是hsql会出现错误,他们需要组合使用才是有效的:),先启动Start Services for Tomcat+LWC 2.1.0 (8080)(双击该图标即可)启动openmdx service服务;然后在双击openCRX Server HSQLDB Console (9001)图标,启动hsql内存数据库,接着双击Start Tomcat+LWC 2.1.0 (8080)图标,启动opencrx-server服务,到此为止,如果没有看到任何异常,那就恭喜你了,服务完全启动成功了!!!!还有两个图标,一个是Login Tomcat+LWC 2.1.0 (8080),这个就是访问opencrx-server的登录页面的快捷方式而已,你在ie中输入地址也是可以的,另外一个就Stop Tomcat+LWC 2.1.0 (8080),停止所有的web服务(openmdx-service和opencrx-server),最后的hsql服务需要手工停止。
   启动时需要组合拳,但是停止确实一键搞定,太让人郁闷了:(

二、在Linux下,安装过程可能并不向官方文档描述的那样,我们大部分所使用的linux应该是不太会支持图形界面的,但是官方的安装文档给出的是有图形界面的,和window下极其相似,不过也没有关系,只要是使用过linux(入门级即可)的应该都可以根据提示完成安装。不过在官方文档的最后,在启动opencrx-server的描述中,给出了一句极具误导性的话“Start Tomcat to start the openCRX Server”,也有可能是偶的e文不好的原因,反正我是理解为启动tomcat即可了。后经验证,其实是需要通过"/installdir/opencrx2.1/bin/control.sh START"命令来启动才可以。注意control.sh的参数“START”.linux下面的启动过程比windows下稍微有好一点:)


好了,今天基本就这样了,后面在慢慢研究opencrx吧,希望有兴趣的朋友一起:)

posted @ 2008-07-26 17:00 雪地孤鸿 阅读(4319) | 评论 (2)编辑 收藏
关于JForum论坛的基本情况就不在此介绍了,官方网址:www.jforum.net.jforum论坛系统的安装也很简单,按照官方文档,或者google一下,基本都可以搞定,在此就不在介绍了。大概描述一下我使用jforum的情况:
1.应用服务器:weblogic8.1
2.数据库:oracle10g
3.已有一个电子商务网站,需要和jforum进行简单的集成,提供sso(单点登录的功能)。
4.说明:已有的电子商务网站域名:http://www.123.com jforum域名:www.123.com/forum,电子商务网站和jfroum在统一台服务器和同一应用服务器下,如果分开可能会存在session或cookie访问的问题。
5.JForum版本:2.1.8
下面简要的介绍一下使用cookie进行jforum和电子商务网站的sso集成的过程:
(1)实现net.jforum.sso接口
public class CookieUserSSO implements SSO {
    static final Logger  logger       = Logger.getLogger(CookieUserSSO.class.getName());

    public String authenticateUser(RequestContext request) {
        // login cookie set by my web LOGIN application
        Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals
                .getValue(ConfigKeys.COOKIE_NAME_USER));
        String username = null;

        if (cookieNameUser != null) {
            username = cookieNameUser.getValue();
        }
        logger.info("cookie username="+username);
        System.out.println("cookie username="+username);
        return username; // return username for jforum
        // jforum will use this name to regist database or set in HttpSession
    }

    public boolean isSessionValid(UserSession userSession,
            RequestContext request) {
        Cookie cookieNameUser = ControllerUtils.getCookie(SystemGlobals
                .getValue(ConfigKeys.COOKIE_NAME_USER)); // user cookie
        String remoteUser = null;

        if (cookieNameUser != null) {
            remoteUser = cookieNameUser.getValue(); // jforum username
        }

        if (remoteUser == null
                && userSession.getUserId() != SystemGlobals
                        .getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
            // user has since logged out
            return false;
        } else if (remoteUser != null
                && userSession.getUserId() == SystemGlobals
                        .getIntValue(ConfigKeys.ANONYMOUS_USER_ID)) {
            // anonymous user has logged in
            return false;
        } else if (remoteUser != null
                && !remoteUser.equals(userSession.getUsername())) {
            // not the same user (cookie and session)
            return false;
        }       
        return true; // myapp user and forum user the same. valid user.
    }

}
(2)修改SystemGlobals.properties中的配置:
    修改
SystemGlobals.properties文件中的一下属性的内容:
    authentication.type = sso
    sso.implementation = net.jforum.sso.CookieUserSSO
    sso.redirect = http://www.123.com/login.jsp //可根据实际的登录页面地址进行修改

    cookie.name.user = 123UserInfo //电子商务网站中保存的cookie名称,可根据实际情况修改

(3)修改web应用中的登录和注销部分的逻辑:
    登录部分加入以下代码:
   
...
    Cookie cookie = new Cookie("springTourUserInfo", sname);
     cookie.setMaxAge(-1);
     cookie.setPath("/");//cookie只在同一应用服务器有效
     response.addCookie(cookie);

   ...
    注销部分加入以下代码:
    ......
      Cookie cookie = new Cookie("springTourUserInfo", "");
      cookie.setMaxAge(0); // delete the cookie.
      cookie.setPath("/");
      response.addCookie(cookie);

    ......
(4)在电子商务网站增加论坛的链接:
    <a href="/forum">论坛</a>

基本配置完整,测试通过,如有问题,欢迎交流!

感谢网友提供的资料:
http://www.lifevv.com/java/doc/20080305224358885.html?page=0
http://www.99inf.net/SoftwareDev/Java/54230.htm(作者:王保政)


   

posted @ 2008-06-26 16:54 雪地孤鸿 阅读(4028) | 评论 (3)编辑 收藏
假设有webapp1, webapp2, cas server,webapp1, webapp2均受cas server保护
首先,我在这里简单解释一下:
第1种不能logout的情况:
1)登录了WebApp1,redirect到caserver
casserver认证后,再redirect到webapp1,ok!
2)http方式 lougout casserver1,即http://yale_casserver:8080/cas/lougout
显示logout成功
3)访问webapp2,还能访问!
这是非常正常的一种情况,因为你不通过https来注销,casserver怎么"杀"掉
它通过https发给你的TGC Cookie?

第2种不能logout的情况:
1)登录了WebApp1,redirect到caserver
casserver认证后,再redirect到webapp1,ok!
2)https方式 lougout casserver1,即https://yale_casserver:8443/cas/lougout
显示logout成功
3)访问webapp1,还能访问!访问webapp2,不能访问,重定向到casserver要求登录!
这也是非常正常的一种情况,因为你已经能够访问,你继续可以继续访问,
CASLogout不能阻止你访问webapp1,它只能阻止你访问webapp2,因为你已经
被允许访问webapp1,而webapp2则还没有,如果你在(1)的时候,顺带也访问
webapp2,那么你的注销将毫无作用了,CAS无法阻止你访问这两个webapp,
因为你有Service Ticket。

如果你对此费解,那时因为你已为Logout就是退出系统,那我只能表示遗憾,
因为CAS Logout的作用不是这样,它的作用是阻止你继续通过TGC(它简单地
清楚了IE的TGC Cookie)来获取ST,阻止你获取通向其他web应用的Ticket。

所以,用完webapp1的时候,注销,然后再关闭掉IE就彻底Logout了。
 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1503551
posted @ 2008-03-28 16:16 雪地孤鸿 阅读(878) | 评论 (0)编辑 收藏
今天花了一个下午的时间,终于完成的cas配置的一次完整的运行。cas前世今生我就不介绍了,有兴趣的朋友谷歌或是百度一下就可以有很详细的了解了,重点记录一下今天的配置过程和遇到的问题及解决方法。
环境:浏览器(ie6.0,windows xp)
    cas server 在一台Linux服务器,cas client在另外一台linux服务器
    应用服务器为tomcat5.5.26
初步的配置实用过程参考了http://www.blogjava.net/yida/archive/2007/04/03/55466.html的描述,各位亦可以访问阿木的blog。整理如下:
1.请下载到cas的官方网站下载cas-server(我用的是3.2)和cas-client(2.0.11),tomcat5.5.26
    cas的官方网站:http://www.ja-sig.org/products/cas/
2.安装cas-server,我们假定安装cas-server的服务器为server1
    (1)请在server1服务器上安装好jdk1.5或以上版本的jdk,tomcat5.5.26,并配置环境变量JAVA_HOME
    (2)将cas-server-3.2-release.zip解压,将moudels目录下cas-server-webapp-3.2.war拷贝到tomcat的webapps目录下,修        改名称为cas.war.
    (3)生成server1的安全证书:
      
keytool -genkey -alias my-alias-name -keyalg RSA -keystore keystore-file
       (4)在server1
配置https
             在
$CATALINA_HOME/conf/server.xml里修改为一下配置
              <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"
               keystoreFile="/path/keystore-file" keystorePass="your-password"
              />
          (5)导出server1的证书,
用来给所有需要用到的客户端导入
               
keytool -export -file myserver.cert -alias my-alias-name -keystore keystore-file
         
(6)将导出的证书上传的client1服务器上。
          (7)启动server1上的tomcat,检验cas配置是否成功,访问http://ip:8443/cas/login,如果能看到cas的登录页面则表示配                置成功。
3.配置 cas-client,我们以tomcat下自带的servlet-example为例子进行说明
    (1)
请在client1服务器上安装好jdk1.5或以上版本的jdk,tomcat5.5.26,并配置环境变量JAVA_HOME
  (2)
将cas-client-2.0.11.zip解压,把java/lib/casclient.jar拷贝到client1服务器上的
            webapps/servlets-examples/WEB-INF/lib目录下(如果没有就建一个)

  (3)在要使用CAS的客户端client1里设置(以servlets-examples这个APP为例),我们使用ServletFilter(CAS client里提供            的)来实现SSO的检查,修改servlets-examples/WEB-INF/web.xml,添加以下内容:
          <filter>
                <filter-name>CASFilter</filter-name>
                <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
                <init-param>
                    <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
                     <param-value>https://your.cas.server.name(eg:server1):port/cas/login</param-value>
                </init-param>
                <init-param>
                    <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
                    <param-value>https://your.cas.server.name(eg:server1):port/cas/proxyValidate</param-value>
                </init-param>
                <init-param>
                    <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
                    <param-value>your.client.server.name(eg:client1):port</param-value>
                </init-param>
            </filter>
            <filter-mapping>
                <filter-name>CASFilter</filter-name>
                    <url-pattern>/servlet/*</url-pattern>
            </filter-mapping>
       (4)
在客户端的JVM里导入信任的SERVER的证书(根据情况有可能需要管理员权限)
            
keytool -import -keystore $JAVA_HOME/jre/lib/security/cacerts -file myserver.cert -alias my-alias-name
             此时需要输入密码,默认密码为changeit
通过以上配置,基本完成cas-server和cas-client的配置,但是还有以下问题需要注意和解决
由于cas的证书需要域名才能正确的进行认证信息的交互,不支持ip,如果server和client在同一台机器上,可以使用localhost,如果像我们上面描述的三台服务器这样的环境,使用localhost或者ip是不能正常运行的。如果使用ip,运行时会抛出
HTTPS hostname wrong 的错误,解决的方法如下:
假设server1的ip为:192.168.10.1,client1的ip为192.168.10.2,开发机器(xp)的ip为:192.168.10.3
在server1和client1上设置本机的域名映射:
vi /etc/hosts 添加以下行
192.168.10.1 cas.server
在开发机器(xp)下,在C:\WINDOWS\system32\drivers\etc目录下,编辑hosts文件,添加以下行
192.168.10.1 cas.server

重新生成cas-sever的服务器端的证书,在开始问“你的名字”或“DName”的时候,必须填写你服务器所在域名(cas.server)
然后重新到处服务器器端的证书,并将其导入到client1服务器的jvm

最后修改
修改servlets-examples/WEB-INF/web.xml中关于cas过滤器的配置:请将your.cas.server.name(eg:server1)修改为cas.server即可。重新启动server1和client1的服务器上的tomcat就可正常运行。


ttp://client1:8080/servlets-examples/servlet/HelloWorldExample
系统会自动跳转到一个验证页面,随便输入一个相同的账号,密码,严正通过之后就会访问
到真正的HelloWorldExample这个servlet了


posted @ 2008-03-25 18:05 雪地孤鸿 阅读(4727) | 评论 (0)编辑 收藏
使用jbossTools创建seam website项目的注意事项,由于seam2.0本身标榜的口号是“企业级的java应用程序框框架”,关键的卖点是“JSF和ejb3.0的深度集成”,所以使用jbossTools工具生成项目结构是,也就天然的对ejb3.0的支持较好,但是如果不使用实体bean之类的东东,就需要对生成的项目的进行适当的修改才可以正常的运行。我想这是jbossTools或是seam框架本身需要改进的地方,jbossTools向导不能根据客户的需求很好的定制生成项目框架,表现的很不友好,对于初学者来说,很容易产生混淆。经过将近两天的测试,现总结如下(以seam2.0的example中hibernate2为例):
1.重建为jboss4.2下的seam2.0+hibernate项目:
需要注意的是:1.通过jbosstools工具生成的项目下面仍然会有“persistence.xml”这个文件存在,如果发布到jboss应用服务器下,仍然会导致jboss在启动时通过该文件进行相关的数据库连接。2.通过jbossTools生成的项目框架,都会默认的生成<项目名称>-ds.xml文件,如果需要使用该文件,需要单独发布,如果不需要,则要修改hibernate-cfg.xml文件的配置信息。
2.重建为tomcat6.0下的seam2.0+hibernate项目:
1.通过jbossTools无法之间在tomcat5.×下建立下项目框架,由于jsf1.2,seam1.2或seam2.0均需要serlet2.5,如果需要在tomcat5.×下创建项目,则只能进行手工配置。
2.在tomcat创建seam website项目,通过jbossTools无法创建完整的项目,相关的第三方包,需要从seam2.0的发布包中手动copy到当前下项目的classpath下(/WEB-INF/lib),主要的第三方包包括:
commons-*.jar,jsf-api.jar,jsf-impl.jar,jstl.jar,dom4j.jar,hibernate.jar,hibernate-commons-annotations.jar,hibernate-annotations.jar,hibernate-entitymanager.jar,hibernate-validator.jar,javassist.jar,persistence-api.jar,cglib.jar,jta.jar,antlr.jar
3.数据源也需要手动配置,如果配置为tomcat的jndi,请参考tomcat的相关文档。
4.注意修改src/action和src/module源文件编译的输出路径到/WEB-INF/classes目录下,否则项目发布后可能会找到相关类路径的错误。
5.其他有jbossTools生成的无关文件可以删除。

在jboss4.2和tomcat6.0下通过jbossTools创建seam website项目框架需要注意的,暂时总结如上。本blog将持续更新有关seam2.0的学习心得。

欢迎交流!




posted @ 2008-03-17 14:16 雪地孤鸿 阅读(1736) | 评论 (3)编辑 收藏
同样,经过不断的摸索和网友的帮助,终于搞定了:),主要的问题还是出在我的服务器上的原因,不知道为什么,我的服务器上部署了sqlite3.0导致apache2.2.6始终无法运行,总是提示找不到"libsqlite3.so.0",不得以,只能换台服务器测试,轻松搞定,现将过程描述如下,一共参考:
一.安装apache2.2.6
    1.    tar fvxz httpd-2.2.2.tar.gz
    2.    进入解压后的目录。进行配置:
          ./configure --prefix=/usr/apache --enable-module=so --enable-proxy --enable-proxy-ajp --enable-forward         --enable-proxy-connect --enable-proxy-http --enable-so --enable-deflate --enable-headers --enable-include
    解释:
          -- prefix=/usr/apache是配置将要安装到的目录位置;
          --enable-module=so配置Apache支持Dynamic Shared Objects (DSO)模式;
          --enable-* 配置添加相应的模块;
    3.    编译(编译如果不成功,确认一下你的linux是否安装有编译所需要的c环境和其他需要的类库):
           make
    4.    安装:
            make install
    5.    编辑/usr/apache/conf/httpd.conf文件,把端口改为80(别跟tomcat的端口冲突):
           ServerName:80
二、安装tomcat5.5.17
    直接解压压缩包到指定目录就可以,再次就不多少说了(当然,最好在进行以上两项操作前先按装好jdk,1.5或以上版本)
三、简单的apche2.2.6+tomcat5.5.17配置说明:
    使用
使用proxy_ajp整合apache和tomcat,由于Apache2.2对以往版本有较大改动,引进了proxy 模块,所以Apache2.2和Tomcat5.5的配置需要用到mod_proxy.so等文件(不再使用jk 或 jk2 等tomcat连接器) .基本配置如下:
(一)加载解析模块
    windows下,或linux采用动态加载(DSO)模式下需配置。前面我们的linux编译时把下面的模块嵌入到了    apache中,所以不用再加载,因此下面的两行也不用再httpd.conf文件中添加了
        LoadModule proxy_module modules/mod_proxy.so
        LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
(二)使用proxy_ajp代理, 下面的配置,是把所有目录全用代理
     使用vi编辑器打开apache的配置文件/conf/httpd.conf,在#LoadModule××××××行的后面添加         以下两行即可:
        ProxyPass / ajp://127.0.0.1:8009/
        ProxyPassReverse / ajp://127.0.0.1:8009/
(三)禁止使用proxy_ajp代理的目录:
     如果对于某些目录不想使用proxy_ajp代理转发,可以按照如下配置(配置方式同上面(二)的操         作):
      ProxyPass /images/ !      (禁止images目录下的内容使用proxy_ajp代理转发)
      配置到现在,重启一下apache,就可通过apache来访问tomcat的服务了。

特别鸣谢:http://groups.csdn.net/Apache/topic/b70ad273-f66f-4699-83c0-e11d354d262a.aspx

posted @ 2007-12-24 18:03 雪地孤鸿 阅读(942) | 评论 (1)编辑 收藏

exp user1/psw1@service1 owner=user1 file=d:\user_data_20060822.dmp log = d:\user_logout_20060822.log

imp user2/psw2@service2 file=d:\user_data_20060822.dmp log =d:\user_login_20060822.log fromuser=user1 touser=user2 

posted @ 2007-08-03 14:02 雪地孤鸿 阅读(324) | 评论 (0)编辑 收藏
现在安装netbeans 5.5默认的UI 语言为中文,如果需要修改为中文,只需在netbeans的安装目录中进行适当的设置就可以了:
1.进入$netbeans/etc
2.使用文本编辑器打开netbeans.conf.
3.在“netbeans_default_options”项后添加“--locale language=en”。
4.重启netbeans即可见到e文的netbeans 的UI
以上的设置在windows xp下测试通过,在linux的下的设置类似。
posted @ 2007-07-15 15:17 雪地孤鸿 阅读(1012) | 评论 (1)编辑 收藏
在部署roller3.0的源代码的时候,每次启动tomcat后访问首页的时候就报错,提示找不到c.tld,但是standard.jar和jstl.jar都以放到lib目录下了,郁闷之极,最后发现是因为在lib下放了一个jsp-api.jar的包导致的
,只要将该包从lib下移除即可了,在此感谢网络上不吝赐教的朋友们:)
posted @ 2006-12-04 15:27 雪地孤鸿 阅读(2299) | 评论 (3)编辑 收藏

1.首先是去下载rller2.3的源代码文件,下载地址:http://rollerweblogger.org/
由于roller采用了xdoclet,所以在下载的源代码中有些内容是没有的,主要缺少的内容如下:
   (1)package org.roller.presentation.forms
   (2)src下缺少相关的hbm文件
   (3)version.properties
   (4)roller.tld
2.由于缺少以上的东西,导致源代码导入工程后,编译都不能通过。我不是太懂xdoclet的使用,所以只好缺什么,就给他什么了,尽量满足他的要求了。在roller-src(roller2.3解压后的文件)下有ant的脚本,所以我猜想,通过脚本,一定可以生成所有缺少的文件,事实也确实如此,只是在使用ant脚本生成roller web的过程也是坎坷的:),主要是应为roller开发小组为了省事,把一些开源的第三方包给去掉了,所以需要自己给补上。不然就会生成不成功。现记录如下:
(1)加上hibernate3.2.1.jar
      在/roller/src/tools目录下建立/hibernate-3.1/lib文件夹,将hibernate3.jar文件copy到该目录下面
(2)加上j2ee.jar
    将j2ee.jar(或jboss-j2ee.jar)copy到/roller-src/tools/buildtime/xdoclet-1.2.3/文件夹下
(3)添加javamail的相关包:mail.jar,actiivation.jar
   将mail.jar,activation.jar copy到/roller-src/tools/lib目录下面。
然后在windows下进入roller-src目录,使用下面命令即可生成roller web,同时可以生成以上缺省的文件:

> build all
然后就可以在roller-src/build目录寻找你需要的文件,同时也有发布好的roller web了


roller2.3的安装发布可以参考roller官方发布的安装文档即可。

大功告成,可以开始学习和修改roller2.3的源码了!:)

posted @ 2006-11-01 15:28 雪地孤鸿 阅读(970) | 评论 (1)编辑 收藏

linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明:
一、mysql5.0.2的安装配置过程及说明:
1、 #tar -zvxf mysql-5.0.2-alpha.tar.gz
2、 cd mysql5.0.2
3、 ./configure --prefix=/usr/local/mysql --sysconfdir=/etc --localstatedir=/var/lib/mysql --with-charset=gbk
  #--prefix=/usr/local/mysql  mysql安装的目标目录
  #sysconfdir=/etc my.ini配置文件的路径
  #localstatedir=/var/lib/mysql 数据库存放的路径
  #--with-charset=gbk 数据库默认的字符集(如果需要支持中文,则必须加上该选项)
4、make
5、make install
6、make clean
安装完成......
7、初始化数据库
 cd /usr/local/mysql/bin
 ./mysql_install_db
 如果系统没有mysql这个用户的话,最好做以下这步:
 useradd -M -o -r -d /var/lib/mysql -s /bin/bash -c "MySQL Server" -u 27 mysql
 然后我启动mysql
 /usr/local/mysql/bin/mysqld_safe &
 ok,先看看mysql能否正常工作
 mysql -uroot mysql
 如果一切正常则表示数据库启动成功,恭喜你了... ...
8、做完上面的步骤,然后把你编译目录的一个脚本COPY过去
  (mysql.server在/usr/local/mysql/share/mysql/目录下)
 cp support-files/mysql.server /etc/rc.d/init.d/mysqld
 chkconfig --add mysqld
 以后启动/停止数据库就可以使用下面的命令:
 /etc/rc.d/init.d/mysqld start
 /etc/rc.d/init.d/mysqld stop
 


二、apache20.55的安装配置说明:(DSO动态编译)
# tar -zvxf httpd-2.0.55.tar.gz
# cd httpd-2.0.55
# ./configure --prefix=/usr/local/apache2 --enable-mods-shared=most --enable-so
# make
# make install
# make clean
apache2安装完成,可以启动apache,看看能否看到那可爱的羽毛... ...

三、php5的安装配置说明:
在安装php5的过程中,真是一波三折,后来还是参考了网上的文章,加载了N多的库才搞定,所以这记录如下
1、 libxml2安装
源代码:libxml2-2.6.26.tar.gz
操作指令:
# tar -zxvf libxml2-2.6.26.tar.gz
# cd libxml2-2.6.26
# ./configure
# make
# make install
# make clean

2、zlib安装
源代码:zlib-1.2.3.tar.tar
操作指令:
# tar -zxvf zlib-1.2.3.tar.tar
# cd zlib-1.2.3
# ./configure
# make
# make install
# make clean

3、libpng安装
源代码:libpng-1.2.12.tar.gz
操作指令:
# tar -zxvf libpng-1.2.12.tar.gz
# cd libpng-1.2.12
# cp scripts/makefile.std makefile
编辑 makefile 将 prefix 改为 prefix=/usr/local/libpng2
# make
# mkdir /usr/local/libpng2
# make install
# make clean

4、jpeg安装
源代码:jpegsrc.v6b.tar.tar
操作指令:
# tar -zxvf jpegsrc.v6b.tar.tar
# cd jpeg-6b
# ./configure --prefix=/usr/local/jpeg6 --enable-shared
# make
# mkdir /usr/local/jpeg6
# mkdir /usr/local/jpeg6/include
# mkdir /usr/local/jpeg6/lib
# mkdir /usr/local/jpeg6/bin
# mkdir /usr/local/jpeg6/man
# mkdir /usr/local/jpeg6/man/man1
# make install-lib
# make install
# make clean

5、GD安装
源代码:gd-2.0.33.tar.gz
操作指令:
# tar -zxvf gd-2.0.33.tar.gz
# cd gd-2.0.33
# ./configure --prefix=/usr/local/gd2 --with-zlib --with-png=/usr/local/libpng2 --with-jpeg=/usr/local/jpeg6
编辑 Makefile 231行 将
CPPFLAGS = -I/usr/local/jpeg6/include (该选项也可能为空,只要参考下面的修改就可以了)
改为
CPPFLAGS = -I/usr/local/jpeg6/include -I/usr/local/libpng2/include
# make
# make install
# make clean

6、libiconv安装
源代码:libiconv-1.9.2.tar.gz
操作指令:
# tar -zxvf libiconv-1.9.2.tar.gz
# cd libiconv-1.9.2
# ./configure --prefix=/usr/local/libiconv
# make
# make install
# make clean

将iconv.h连接到php的安装源程序中(php的安装源程序必须要和iconv.h在同一磁盘目录下面,否则link会出错),否则会php make会出错
# cd /usr/home/ty/php-5.1.6/ext/iconv/(该目录为php的安装源程序目录)
#这里的php-5.1.6就是下面解压缩的路径
# link /usr/local/libiconv/include/iconv.h iconv.h

7、开始安装PHP5
源代码:php-5.1.6.tar.gz
操作指令:
# tar -zxvf php-5.1.6.tar.gz
# cd php-5.1.6
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-xml --with-mysql=/usr/local/mysql --with-zlib --with-jpeg-dir=/usr/local/jpeg6 --with-png-dir=/usr/local/libpng2 --with-iconv=/usr/local/libiconv --with-config-file-path=/usr/local/lib --disable-debug --enable-safe-mode --enable-trans-sid --enable-memory-limit --enable-short-tags --disable-posix --enable-exif --enable-ftp --enable-sockets

# make
# make install
# make clean
# cp /usr/src/php-5.1.6/php.ini-dist /usr/local/lib/php.ini

php安装完成 ... ...

8、把php加到apache里去
操作指令:
# vi /usr/local/apache2/conf/httpd.conf
(1)在httpd.conf文件相应的地方添加下面几行(如果在安装php5时,有的配置可以已经加上了,就不需要再重新添加了)
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php
在DirectoryIndex index.html index.html.var 后面添加index.php

配置完成... ...

四、测试
然后放个info.php文件上去测试看看成功

vi /usr/local/apache2/htdocs/test.php
输入以下代码,保存。
<?
phpinfo();
?>
然后启动apache,访问http://your ip(or your website)/info.php
如果能够看看php的相关信息,恭喜你,你的所有的配置成功了。!


以上的配置,一共花了我将经两天的时间,终于成功了,衷心的感谢网上无偿提供帮助的朋友,在此记录下来,希望对其他人也能提供一定的帮助!


时隔多日,重新安装apache2.2.11+php5.2.9+mysql6.0

三个应用的安装基本没有太大的变化,只是更加友好了:),关键是配置让我花了点时间,很是郁闷,几天没有关注,事情就变样了。IT界发展的就是快啊:),下面就详细说说配置中遇到的问题吧:

一、apache2.2.11配置

相对以前的版本,apache的配置文件分成了多个配置文件,本想配置一个vhost,但是在httpd.conf中就是没有找到,最后G了一下才发现,虚拟主机的配置已经被单独为一个配置文件了。在httpd.conf文件中去掉“Include conf/extra/httpd-vhosts.conf”该行前面的注释,让后进入conf/extra目录,打开httpd-vhosts.conf进行配置即可。

、mysql6.0的安装:

由于mysql已经被sun收购,发布方式也有所变化了,目前官方网站上提供的了都是rpm的安装方式,及其方便:rpm -ivh ***.rpm即可。但是和以前自己编译的方式有点不一样,需要安装server,client,MySQL-devel-community-6.0.9-0.rhel5.x86_64.rpm,有可能还要share包。不然在和php结合使用时会有问题。

三、php5.2.9的安装配置

./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-xml --with-gettext=/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613 --with-mysql=/usr/lib/mysql

上面是我的配置,主要用来运行gallery2.3.这里需要说明的有gettext(多语言支持)的配置:

1.首先进入到php源码包中 

cd /opt/php-5.1.2/ext/gettext 

2. 在gettext文件夹下产生configure文件 

/opt/php/bin/phpize 

3. 配置编译 

./configure --with-php-config=/opt/php/bin/php-config --with-gettext 

 make && make install 

4. 在/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613下产生一个gettext.so文件 

5.重新配置编译安装php


mysql6.0配置:

安装php的时候,之前一直提示msyql client包找不到,由于我使用的是linux as 5 x86_64的操作信息,mysql client 包是存放在/usr/lib64下面,而php默认是在/usr/lib下寻找,所以需要如下解决:

1.做个软连接即刻解决 ln -s /usr/lib64/mysql /usr/lib

2.按上面的配置执行即可。


鸣谢:http://www.oschina.net/p/php/thread/87




 

 

 

 


 

posted @ 2006-10-20 15:05 雪地孤鸿 阅读(15303) | 评论 (4)编辑 收藏

本想使用打包后的war来控制发布的版本,但是在发布后,编译jsp文件时却出现编译错误:
Exception compiling Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK

ERROR 09-14  14:07:56,726 [TP-Processor3] (ApplicationContext.java:675) - Exception:
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
 at org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:105)
 at org.apache.tools.ant.taskdefs.Javac.compile(Javac.java:924)
 at org.apache.tools.ant.taskdefs.Javac.execute(Javac.java:757)
 at org.apache.jasper.compiler.Compiler.generateClass(Compiler.java:320)
 at org.apache.jasper.compiler.Compiler.compile(Compiler.java:370)
 at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:473)
 at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:190)
 at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
 at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
 at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
 at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
 at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
 at com.mdcchina.util.Validates.FromFilter.doFilter(Unknown Source)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:541)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
 at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
 at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
 at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
 at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:595)
ERROR 09-14  14:07:56,734 [TP-Processor3] (ApplicationDispatcher.java:704) - Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP

An error occurred at line: -1 in the jsp file: null

Generated servlet error:
    [javac] Compiling 1 source file


需要将jdk下面的tools.jar包加入到应用的classpath下面,或是将其copy到tomcat的/common/lib下
才能解决该问题:)

posted @ 2006-09-14 16:59 雪地孤鸿 阅读(4414) | 评论 (2)编辑 收藏
最近,运行的tomcat服务器在正常运行将近2个月后,抛出如下错误:

警告: Reinitializing ServerSocket
2006-7-28 15:07:40 org.apache.tomcat.util.net.PoolTcpEndpoint acceptSocket
严重: Endpoint ServerSocket[addr=0.0.0.0/0.0.0.0,port=0,localport=80] ignored exception: java.net.SocketException: Too many open files
java.net.SocketException: Too many open files
 at java.net.PlainSocketImpl.socketAccept(Native Method)
 at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:384)
 at java.net.ServerSocket.implAccept(ServerSocket.java:450)
 at java.net.ServerSocket.accept(ServerSocket.java:421)
 at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:60)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.acceptSocket(PoolTcpEndpoint.java:407)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:70)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:595)

原本以为是tomcat的配置或是应用本身的问题,"谷歌"一把后才发现,该问题的根本原因是由于系统文件资源的限制导致的。具体可以参考http://www.bea.com.cn/support_pattern/Too_Many_Open_Files_Pattern.html
的说明。具体的解决方式可以参考一下:
1。ulimit -a 查看系统目前资源限制的设定。
   [root@test security]# umlimit -a
-bash: umlimit: command not found
[root@test security]# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 1024
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited
[root@test security]#
通过以上命令,我们可以看到open files 的最大数为1024
那么我们可以通过一下命令修改该参数的最大值
2. ulimit -n 4096
[root@test security]# ulimit -n 4096
[root@test security]# ulimit -a
core file size        (blocks, -c) 0
data seg size         (kbytes, -d) unlimited
file size             (blocks, -f) unlimited
max locked memory     (kbytes, -l) unlimited
max memory size       (kbytes, -m) unlimited
open files                    (-n) 4096
pipe size          (512 bytes, -p) 8
stack size            (kbytes, -s) 8192
cpu time             (seconds, -t) unlimited
max user processes            (-u) 7168
virtual memory        (kbytes, -v) unlimited

这样我们就修改了系统在同一时间打开文件资源的最大数,基本解决以上问题。

另外我们可以通过lsof  -p [进程的 pid]来查看系统当前打开的文件资源,可以了解不同时期系统的文件资源的使用情况,可根据情况进行系统资源的配置。
posted @ 2006-07-31 11:39 雪地孤鸿 阅读(4118) | 评论 (0)编辑 收藏

这几天要用到一个简单的权限管理,本来想用struts-Menu简单搞定,但是很是郁闷的是不知道怎么样将tomcat的角色应用到struts-menu中,在网上搜了好久,终于在www.yahoo.com.cn中找了不知道是那位大侠的文章,在此感谢了,也希望能给他人方便,特转贴到此:

刚刚接触Struts Menu的时候,对Struts Menu基于角色的菜单显示很好理解,但是如何将Web应用中的角色管理映射到Struts Menu中,是困扰笔者良久的问题。经过摸索,在查阅了Tomcat的手册之后,笔者找到了答案。

 

Servlet容器和web应用都可以控制web应用资源的安全,因此Tomcat管理域有容器管理和应用程序管理两种,默认使用容器管理。通常web应用中使用的登陆Servlet和JSP则是应用程序管理。这就涉及到Realm的概念。

 

Tomcat在%CATALINA_HOME%/conf/server.XML文件中配置Realm,结合在%CATALINA_HOME%/WEB-INF/mywebapp/web.xml文件中配置的<security-constraint>,定义了存储用户和角色的信息,以及进行用户验证的方式。

 

Tomcat中定义的Realm有如下几种实现:UserDatabaseRealm、JDBCRealm、JNDIRealm和JAASRealm。下载Tomcat解压缩后默认使用的是UserDatabaseRealm。该Realm从%CATALINA_HOME%/conf/tomcat-users.xml静态文件中加载内存,Tomcat运行期间不会动态加载。因此所有的用户、角色和密码都是在Tomcat启动之前配置好的,只存在于内存中。修改tomcat-users.xml文件后必须重新启动Tomcat,该文件的具体配置请参考Tomcat手册。

 

本文要着重介绍的是JDBCRealm,该Realm使用关系数据库,能够动态访问数据。用户、角色和密码都保存在数据库中,一旦数据库有变化,JDBCRealm会立即访问。相应,JDBCRealm的设置需要数据库的访问参数。Tomcat5.0.28中给出了几种数据库的配置参数,示例如下:

 

<Realm  className="org.apache.catalina.realm.JDBCRealm"

 

debug="99" digest="MD5"

 

             driverName="Oracle.jdbc.driver.OracleDriver"

 

          connectionURL="jdbc:oracle:thin:@ntserver:1521:ORCL"

 

         connectionName="scott" connectionPassword="tiger"

 

              userTable="users" userNameCol="user_name" userCredCol="user_pass"

 

          userRoleTable="user_roles" roleNameCol="role_name" />

 

 

 

属性说明如下:

className是实现Realm的类名,对于JDBCRealm必须是org.apache.catalina.realm.JDBCRealm。

 

debug设置调试信息的详细程度等级,0表示不调试,数字越大越详细。

 

digest是数据库中密码字段的加密摘要算法名称,有SHA、MD2或MD5,默认是cleartext,即不加密。

 

driverName是数据库访问的JDBC驱动

 

connectionURL是数据库访问URL参数

 

connectionName和connectionPassword是访问数据库的名称和密码

userTable是web应用中存储用户信息的表名

userNameCol是用户信息表中存储用户登陆名称的字段名

userCredCol是用户信息表中存储用户登陆密码的字段名

userRoleTable是将用户角色映射表名

roleNameCol是角色表中存储角色名称的字段名

有了这些定义,web应用中定义的用户和角色就可以在Struts Menu中,用于配置基于角色可见与否的菜单。

 

posted @ 2006-04-12 10:26 雪地孤鸿 阅读(781) | 评论 (0)编辑 收藏

在网上找了很久,看了很多的文档,终于将appfuse成功的编译,发布了:这样感谢广大网友的无私奉献了,好了,闲话少说了,具体的操作如下:
Appfuse1.9,JDK1.5,ANT1.6.2,Mysql5.0,Tomcat5.5

一.环境设置:
以下环境变量均按本机的安装路径设置即可。
ANT_HOME,
JAVA_HOME,
CATALINA_HOME,
MYSQL_HOME
Path中加入
%JAVA_HOME%bin;%ANT_HOME%bin;%CATALINA_HOME%bin;%MYSQL_HOME%bin;
二 在eclipse中使用ant编译,发布,测试appfuse
1.Create New Java Project in Eclipse
Open Eclipse (either with an existing or a new workspace) and to go File → New → Project. Then select "Java Project" and hit the Next button. In the Project Name field, enter the name of your project (i.e. appfuse) and the directory that your project lives (i.e. c:\source\appfuse) in the box below. If you're prompted to switch the Java Perspective, choose Yes.
If you try to build the project at this point, you'll likely get numerous errors. Most of them involve the fact that the UserForm class can not be found. This is because all of the ActionForms in AppFuse (if you're using the Struts version) are generated from POJOs with XDoclet.

All of the tasks for XDoclet are configured in the Ant build.xml file so the easiest thing to do is to run "ant gen-forms" to generate the ActionForms. If you have Ant 1.6.2+ installed and in your path, you can do this from the command line. The next step shows you how configure Eclipse to run your AppFuse build.xml.

2.Configuring Ant in Eclipse

The easiest way to configure Eclipse for AppFuse is to install Ant on your hard drive (i.e. c:\Tools\apache-ant-1.6.2) and then point Eclipse's ANT_HOME to this directory. To do this, go to Window → Preferences → Ant → Runtime. Then click the "Ant Home" button and select the installation folder on your hard drive.

If you'd rather use Eclipse's built-in Ant, you'll need to add junit.jar to its classpath. To do this, go to Window → Preferences → Ant → Runtime. Then click the "Add JARs" button and select junit.jar from appfuse/lib/junit3.8.1/lib/junit.jar. Click OK until you arrive back at the workbench view.

Next, add the catalina-ant.jar (from $CATALINA_HOME/server/lib) to the ant classpath. Then in the property tab, add tomcatTasks.properties (in lib/ant-contrib) file as a global properties file.

Below is a screenshot of what your Ant Runtime classpath should look like after the above modifications:
ant-runtime.png

3.Add build.xml to Ant View
Now we need to add the build.xml to Eclipse's Ant View. To do this, go to Window → Show View → Ant. Then click on the first icon in this view (screenshot below) to add AppFuse's build file.
ant-view.png

4.Run Ant
After adding the build.xml, you should be able to expand it in the Ant View and execute any of the targets. I usually do "test-all" to verify all the tests pass in my initial project. For a list of targets I use most often, see AppFuse Ant Targets.
Now if you run the "compile" target and then refresh the project (right-click on project → Refresh) you shouldn't see any errors in the "Problems" pane. You should now be able to compile and create classes as you normally would. Sometimes when my imports aren't resolving correctly in Eclipse, I do have to run Project → Clean in Eclipse.

NOTE: If you're using the internal version of Ant, you may get an error message like the one below:
BUILD FAILED: C:\source\appfuse\build.xml:802: The following error occurred while executing this line:
C:\source\appfuse\build.xml:780: The following error occurred while executing this line:
java.lang.NoClassDefFoundError: org/apache/xml/serialize/OutputFormat
This is because there are tasks that require Xerces to be in your Ant classpath [reference]. I added xercesImpl.jar and xml-apis.jar (from my self-installed version of Ant) to Eclipse's Ant classpath to solve this.
5.Run JUnit Tests in Eclipse
It's also possible to run your JUnit tests in Eclipse. But before running them, you need to run the "war" target. After this target completes, refresh your project.
After you have successfully done so, in Eclipse open a test you'd like to run (i.e. UserDaoTest) and go to Run → Debug As → JUnit Test. Note that you may have to run the "db-load" target before you run your tests every so often. I did have the following method in the Base*TestCase class for each layer, but this caused DBUnit to reload the database before every test in a Test class. Removing it reduces the execution time of "test-all" by more than 30 seconds.

 

    protected void setUp() throws Exception {
        DataSource ds = (DataSource) ctx.getBean("dataSource");
        IDatabaseConnection conn = new DatabaseConnection(ds.getConnection());
        IDataSet dataSet =
            new XmlDataSet(new FileInputStream("metadata/sql/sample-data.xml"));
        // clear table and insert only sample data
        DatabaseOperation.CLEAN_INSERT.execute(conn, dataSet);
        conn.close();
    } 


If the instructions above don't work for running JUnit tests in Eclipse, I suggest just using the command line - i.e. ant test-dao -Dtestcase=UserDAO. Running tests from the command line always works. ;-)

好了 ,在eclipse中基本按以上操作就可以成功了,等有时间,我来翻译一下,虽然我的e文比较烂,但是还是乐于让大家校正的
:)原文的地址:http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuseEclipse
问题描述
1.刚开始的时候,我们的mysql的用户名和密码可能和appfuse的默认的用户和密码会不一样的,这个可以到properties.xml文件中修改为我们安装mysql是设置的用户名和密码,我的修改如下:
 <!-- Defaults for database.properties -->
    <property name="database.jar" location="${mysql.jar}"/>
    <property name="database.type" value="mysql"/>
    <property name="database.name" value="appfuse"/>
    <property name="database.host" value="localhost"/>
    <property name="database.username" value="root"/>
    <property name="database.password" value="780121"/>
   
    <!-- database URL for creating other dbs - used in db-create target -->
    <property name="database.admin.url" value="jdbc:${database.type}://${database.host}/mysql"/>
    <property name="database.admin.username" value="root"/>
    <property name="database.admin.password" value="780121"/>
    <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
    <property name="database.driver_class" value="com.mysql.jdbc.Driver"/>
    <property name="database.url"
        value="jdbc:${database.type}://${database.host}/${database.name}?useUnicode=true&amp;amp;characterEncoding=utf-8"/>
    <property name="database.show_sql" value="true"/>

我是修改了root用户的密码,当然你也可以建立test用户并给初始密码:)
2.连接数据库的问题解决后,另外一个问题有出来了,建立user_role表的时候出问题了:org.dbunit.dataset.NoSuchTableException: user_role
这个问题的解决方式如下:
setup-tomcat deploy
ant setup -Ddatabase.username=foo -Ddatabase.password=bar
这个主要是先执行以下build.xml中的setup-tomcate deploy指令就可以了:)
原载地址:http://b0r0j0.blogbus.com/logs/2005/12/1725103.html

posted @ 2006-04-07 19:55 雪地孤鸿 阅读(1884) | 评论 (0)编辑 收藏

最近在一个充值平台上使用了HSQL来记录用户的充值记录,本来所有的记录是写到文件里面的,但是由于使用ORACLE的惯性思维导致我浪费了半天的时间.具体情况是这样:
我使用的是HSQL的IN-PROCESS(Standalone)模式,这样在WEB启动的时候,我就会去创建数据库,按照HSQL的文档,如果存在<dbname>.script文件的话,数据库就会将历史数据插入到数据库中,但是在这里我放了一个惯性的错误,我们在ORCALE或是其他的常用数据库中创建表时,一般要先删除就表,让后在创建新的表,这样我就把HSQL的历史记录都删除了,郁闷啊,这可是用户的充值记录啊,以后我怎么对帐啊,:)还好我有备份.
在HSQL更本不需要这样的操作,他自己会去做这样的事情:如果<dbname>.script存在,他就直接执行了这个script,如果没有他才回去创建新的数据库和表结构.

posted @ 2005-12-26 21:44 雪地孤鸿 阅读(1275) | 评论 (1)编辑 收藏

最近将手上的项目(tomcat5.0+spring+struts)的jdk1.4升级到1.5的时候,出现了一堆的问题,经过不懈的努力和网上朋友的提示终于将问题解决了,现在记录如下
1.java.lang.UnsupportedClassVersionError: com/mdcchina/userinfo/logic/UserManager (Unsupported major.minor version 49.0)提示如上的错误,很是郁闷
经过研究和比较在两个不同环境下的编译运行,终于发现这个主要是由于我的机子上安装了两个不同版本的JDK导致的,我想很多的朋友在尝试新的JDK的时候,可能不会删除1.4的版本,但是要注意的是要将JAVA_HOME,CLASS_PATH,PATH等等的环境变量都修改成相关的JDK1.5的目录下面去,因为1.5相对于以前的版本的变化比较大.
2.上面的问题排除后,在运行TOMCAT5.0时候由出现了如下的错误:
2005-11-17 19:38:47 StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
org.apache.jasper.JasperException: Unable to compile class for JSP

Generated servlet error:
C:\application\Tomcat 5.0\work\Catalina\localhost\mlinkweb\org\apache\jsp\layouts\layout_005findex_jsp.java:7: cannot access java.lang.Object


Generated servlet error:
bad class file: C:\application\Java\jdk1.5.0\jre\lib\rt.jar(java/lang/Object.class)
class file has wrong version 49.0, should be 48.0
Please remove or make sure it appears in the correct subdirectory of the classpath.
public final class layout_005findex_jsp extends org.apache.jasper.runtime.HttpJspBase
             ^
1 error

这个问题这是让我郁闷之极啊(^_^)
最后在SUN的JAVA论坛里面找到了答案,只要将JDK1.5的LIB下面的TOOLS.JAR覆盖TOMCAT5.0目录/common/lib下面的tools.jar,然后重启TOMCAT5.0就可以了

posted @ 2005-11-17 20:28 雪地孤鸿 阅读(3203) | 评论 (3)编辑 收藏
<2005年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

常用链接

留言簿(17)

随笔分类

随笔档案

文章档案

blog

搜索

  •  

最新评论

阅读排行榜

评论排行榜