Recently in 技术 Category

Oracle Sql Turning培训归来

| | Comments (0) | TrackBacks (0)

连着三天参加了Oracle University的Oracle Database 10g: SQL Tuning Workshop的培训,获益非浅.

先上两张图,心得待续...:>

 

oracle_sql_turning 001_1.JPG


oracle_sql_turning 004_1.jpg
 

 

  目前在整合几个应用时,遇到了iframe无法获取cookie(session)的问题,经过google,终于把这个问题解决了,现在记录一下。
   我的需求是这样的。
   有一个应用是用.net开发的,主要是控制用户登录,用户访问权限的,部署在上海机房。现在就叫A应用吧
   还有一个应用是用java开发,主要是具体业务的操作。部署在北京机房,这里叫B应用吧
   由于已经有一个用户管理和权限的应用程序,所以java 开发的这个B应用就没有开发用户权限的功能,想直接使用.net的A程序。

  用户访问的流程是这样的:
    1.用户先在A处登录,A设自己的cookie,在A的菜单里有去B应用的链接
    2.当用户点去B应用的链接时,A在链接上自动加上这个用户的token,传给B系统
   3.当B系统接收到请求后,把这个用户的token信息设成自己系统的cookie,(B系统里有表单post操作,如果不设cookie,session,那么每个请求不管GET还是POST都要明确带着该用户的token信息,对于系统的改造量比较大,另外以后换权限验证方法改动也比较大。)
  4.用户在B系统里的每次操作都没有明码带用户的token,所以每次都要去cookie得到token信息,然后发送一个http请求去A,让A系统验证这个用户是否有权限访问。
    5.如果A系统的接口返回可以访问的状态报告,那么B继续执行;如果A系统指示没有权限访问,那么B系统提示访问受控警告信息。

  一切开发都完成,到整合上线时,发现这个流程走不通,百思不得其解,想了半天也不知道 怎么 回事,google了半天,才发现原来是ie在捣鬼,IE不允许跨域访问cookie(好象firefox没问题,ie自6.0以后改用w3c组织的P3P协议了),再看看我的应用,在第二步设的cookie,在第三步以后所有B应用的访问请求,ie都把B应用的cookie blocked掉了(因为用户的访问是从A应用发起,从A应用访问B应用的东东,算跨域访问,IE认为有安全问题)。。。。(IE状态栏有一个红眼睛的button,点开可以看到哪些cookie给blocked掉了)

     知道原因就好办了,再google知道可以用P3P header可以解决问题!
     下面是java的解决办法之一,也是我的解决办法,不过个方法不太好:
     直接往响应里加一个P3P的header
     response().addHeader("P3P", "CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"");

其中CP=“XXX XXXX”这些是有具体含义的:
     CP就是compact policies的意思,
    另外
header的值也可以是policyref="http://myhost/P3P/PolicyReferences.xml",就是指定一个策略文件。

具体请看这里.


下面是摘抄的一段Compact Policies的具体取值范围和设值含义。

 Compact Policies

Compact policies are essentially summaries of P3P policies. They can be used by user agents to quickly get approximate information about P3P policies, therefore improving performance.

For an in-depth explanation of compact policies, we refer to the P3P1.0[4] specification. Here, we limit to stating the syntax:

compact-policy-field  = `CP="` compact-policy `"`

compact-policy = compact-token *(" " compact-token)

compact-token = compact-access |
compact-disputes |
compact-remedies |
compact-non-identifiable |
compact-purpose |
compact-recipient |
compact-retention |
compact-categories |
compact-test

compact-access = "NOI" | "ALL" | "CAO" | "IDC" | "OTI" | "NON"

compact-disputes = "DSP"

compact-remedies = "COR" | "MON" | "LAW"

compact-non-identifiable = "NID"

compact-purpose = "CUR" | "ADM" [creq] | "DEV" [creq] | "TAI" [creq] |
"PSA" [creq] | "PSD" [creq] | "IVA" [creq] | "IVD" [creq] |
"CON" [creq] | "HIS" [creq] | "TEL" [creq] | "OTP" [creq]

creq = "a" | "i" | "o"

compact-recipient = "OUR" | "DEL" [creq] | "SAM" [creq] | "UNR" [creq] |
"PUB" [creq] | "OTR" [creq]

compact-retention = "NOR" | "STP" | "LEG" | "BUS" | "IND"

compact-category = "PHY" | "ONL" | "UNI" | "PUR" | "FIN" | "COM" |
"NAV" | "INT" | "DEM" | "CNT" | "STA" | "POL" |
"HEA" | "PRE" | "LOC" | "GOV" | "OTC"

compact-test = "TST"

另外这里还有一个P3P的验证工具:http://www.w3.org/P3P/validator.html,可以验证一下自己设置的P3P是否正确。

这里还有一个老外写的不错的blog,也可以参考一下。http://www.sitepoint.com/article/p3p-cookies-ie6/2



   

使用Oracle Rac

|
什么是rac?

RAC(Real Application Cluster,真正应用集群)是Oracle9i数据库中采用的一项新技术,也是Oracle数据库支持网格计算环境的核心技术。它的出现解决了传统数据库应用中面临的一个重要问题:高性能、高可伸缩性与低价格之间的矛盾。

在JAVA中使用rac

JDBC的连接字符串要换为:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
                                                                        (ADDRESS=(PROTOCOL=TCP)(HOST=dbhost1)(PORT=1521))
                                                                        (ADDRESS=(PROTOCOL=TCP)(HOST=dbhost2)(PORT=1521))
                                                                        (FAILOVER=on)
                                                                        (LOAD_BALANCE=off)
                                                                )
                                                                (CONNECT_DATA=
                                                                        (SERVER=DEDICATED)
                                                                        (SERVICE_NAME=dbservice)
                                                                )
                               )


tnsname.ora中的设置:

SMSDB_RAC=
        (DESCRIPTION= 
            (ADDRESS_LIST= 
                (LOAD_BALANCE=ON) 
                (FAILOVER=ON) 
                (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1522)) 
                (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1523)) 
                (ADDRESS=(PROTOCOL=tcp)(HOST=your_ip_or_name)(PORT=1521))
            ) 
        (CONNECT_DATA= 
            (FAILOVER_MODE=  (TYPE=select)(METHOD=basic)) 
            (SERVICE_NAME=rac.test.com))
        )

flex mvc框架

|
一个大名鼎鼎的Cairngorm
有很多教程.

另外还有一个model glue flex.

相对而言我更喜欢model glue flex.

Cairngorm太复杂了,我觉得用起来最起码应该有一套代码框架生成工具,就像rails一样.
另外model glue flex现在项目刚开始,连最基本的文档都没有,不过我认为不影响使用,因为这个东东比较简单,看看它的那个下载包的两个example就知道怎么用了.
我打算在新项目里使用model glue flex.

PS:model glue flex下载包的编译好的swc,我在使用时,竟然是有问题,找不到com.firemoss.modelglue.tags.event这个包,不过还好,有源文件,重新编译一下swc文件再引进来就好.

About this Archive

This page is a archive of recent entries in the 技术 category.

blog is the previous category.

生活 is the next category.

Find recent content on the main index or look in the archives to find all content.

技术: Monthly Archives

Powered by Movable Type 4.01a