applet沙箱权限问题

官方解释:

http://download.oracle.com/javase/6/docs/technotes/guides/plugin/developer_guide/security.html

  • All unsigned applets are run under the standard applet security model.
  • If usePolicy is not defined in the java.policy file, then a signed applet has the AllPermission permission only if Java Plug-in can verify the signers, and the user agrees to granting the AllPermission permission when prompted.
  • If usePolicy is defined, then a signed applet has only the permissions defined in java.policy and no prompting occurs.

对于第二点,就是说签了名的一般都是有所有权限的。

但是还需要如下的处理[这个是必要的]
对于签名的applet,

  1. AccessController.doPrivileged(new PrivilegedExceptionAction() { 
  2.    public Object run() throws Exception { 
  3.    //you unsafe code                                          
  4.        return null; 
  5.    } 
  6. }); 


我们知道Java applet在浏览器中运行时默认情况下是不能访问本地资源的,比如读写客户端电脑上的文件。这是Java的安全沙箱机制,简单说就是有一组安全检查规 则,要通过检查之后才能访问特定资源。不过在企业应用中这种安全机制有时候并不是十分必要,这里我们就讨论一下在企业应用中突破沙箱检查的方案。
    当然,很多朋友会说,这太简单了,只需要改一下java.policy就可以了,授予程序对所有权限就可以了,就像下面这样:
     grant {
          permission java.security.AllPermission;
     };
没错,这样确实可以使客户端applet有权限访问任何资源,但是这个方案有个很实际的问题:java.policy是位于每个客户端电脑的jre 目录下的,如果要修改,那么就需要通知每一个使用该系统的用户,并指导他们做相应操作。这对于搞IT的用户来说是小菜一碟,但对一般业务人员来说却是个额 外的工作,这样的发布方式很难被人认可。

    另一个方案——对applet进行签名,用户访问时系统会弹出安全提示框,用户如果信任该程序,点击确认就相当于赋予了这个客户端小程序访问本地资源的权限。这是个很典雅的方案,体现了系统安全和对用户权利的尊重!具体做法大致如下:
    1、编写applet,编译并打成jar包
    2、对jar包签名
        这一步首先要产生证书,利用jdk提供的工具,执行类似下面的命令:
       keytool -genkey -keystore d:\mykeys.store -alias test -validity 300
       根据系统提示执行完这个命令后会生成一个证书库,上例是:mykeys.store,-validity 300是证书有效期为300天的意思,接下来用这个证书库中的证书给jar包签名,仍然是jdk的工具,命令类似下面:
       jarsigner -keystore d:\mykeys.store d:\applet.jar test
    3、把applet.jar发布到应用服务器

    这个看似完美的方案实际也有一点问题,很多时候我们并不希望把客户端程序都打到一个jar包里,那么多个jar包就需要分别签名,每次修改完客户端程序, 都要重新打包和签名,不然就只有applet能访问本地资源。我们不想这么麻烦,甚至我们有时都不希望对客户端代码打包,这时候签名就不好实现了。那么如 何解决这个问题呢,看下面这招。
    既然applet已经被用户授权,那么是否可以在applet里改变安全管理器(SecurityManager)?实验证明是可以的!只需要继承 SecurityManager类,创建自己的安全管理器类,然后覆盖checkPermission方法,允许访问任何资源。在applet的init 方法中调用System.setSecurityManager把安全管理器设置为我们自己的就一切OK了!

    至此,我们彻底突破了沙箱检查,而且客户体验很好,完美的方案!

代码很简单,类似于下面这样即可:[这种解决方法我也加了,没有测试是否必须--好像不起作用,没签名的引用包还是报错]
public class MainApplet extends JApplet {

private class DefaultSecurityManager extends SecurityManager {
@Override
public void checkPermission(Permission perm, Object context) {
}

@Override
public void checkPermission(Permission perm) {
}
}

@Override
public void init() {
super.init();
System.setSecurityManager(new DefaultSecurityManager());
  }
}

总结:
如果有是默认权限之外的代码:
1:需要签名
2:需要在applet中

  1. AccessController.doPrivileged(new PrivilegedExceptionAction() { 
  2.    public Object run() throws Exception { 
  3.    //you unsafe code                                          
  4.        return null; 
  5.    } 
  6. }); 

3:需要用户接受证书

在写skype4java applet时遇到的问题都是关于将包内资源dll加载的问题,winp,skype4java的实现都在applet环境下工作不好,我的解决方法是将其复制到tmp目录下再加载即可。

Continue reading applet沙箱权限问题

html5资源

[标准]
http://dev.w3.org/html5/postmsg/
http://dev.w3.org/html5/websockets/
http://dev.w3.org/html5/eventsource/
[当前实现]
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28HTML_5%29#Related_specifications
[game教程]
http://www.brighthub.com/hubfolio/matthew-casperson/blog/archive/2009/06/29/game-development-with-javascript-and-the-canvas-element.aspx
[中文教程]
http://kb.operachina.com/node/190
[cake框架教程]
http://www.brighthub.com/hubfolio/matthew-casperson/blog/archive/2009/08/24/cake-programming-tutrorials.aspx
gif动画转图片
http://share.wglm.net:81/ts/Ulead_GIF_Animator5.0.rar
游戏
https://github.com/oldj/html5-tower-defense
websocket的缺陷
http://blogs.webtide.com/gregw/entry/websocket_chat
1:经常断线
2:不知道是否发送成功
3:keepalive
4:消息重发导致死循环[消息体过大]
替代物

Comet is Always Better Than Polling

-----------------------------------------------------------------------------------------------------------------------------

 

推荐10款非常优秀的HTML5开发工具

2011-10-09 09:37 | 2649次阅读 | 来源:梦想天空的博客 【已有0条评论】发表评论

关键词:HTML5 | 作者:梦想天空 | 收藏这篇资讯

HTML5发展如火如荼,随着各大浏览器对HTML5技术支持的不断完善以及HTML5技术的不断成熟,未来HTML5必将改变我们创建Web应用程序的方式。今天这篇文章向大家推荐10款优秀的HTML5开发工具,帮助你更高效的编写HTML5应用。

1.Initializr

推荐10款非常优秀的 HTML5 开发工具

Initializr是制作HTML5网站最好的入门辅助工具,你可以使用提供的特色模板快速生成网站,也可以自定义,Initializr会为你生成代码简洁的可定制的网页模板。

2.HTML5demos

推荐10款非常优秀的 HTML5 开发工具

想知道你的浏览器是否支持HTML5 Canvas吗?想知道Safari是否可以运行简单的HTML5聊天客户端吗?HTML5demos会告诉你每一个HTML5特性在哪些浏览器中支持。

3.HTML5 Tracker

推荐10款非常优秀的 HTML5 开发工具

想了解HTML5的最新动向吗?使用HTML5 Tracker吧,它可以跟踪HTML5最新修订信息。

4.HTML5 visual cheat sheet

推荐10款非常优秀的 HTML5 开发工具

想要快速超找一个标签或者属性吗?看看这个非常酷的速查手册吧,每个Web开发人员的必备。

5.Switch To HTML5

推荐10款非常优秀的 HTML5 开发工具

Switch To HTML5是一个基础而有效模板生成工具。如果你开始一个新项目,可以到这里获取免费的HTML5网站模板。

6.Cross browser HTML5 forms

推荐10款非常优秀的 HTML5 开发工具

HTML5中的日历,取色板,滑块部件等都是非常棒工具,但是有些浏览器不支持。这个页面将帮助你构建完美的HTML5表单兼容方案。

7.HTML5 Test

推荐10款非常优秀的 HTML5 开发工具

你浏览器准备好迎接HTML5革命了吗?HTML5 Test将告诉你。这个网站会为你当前使用的浏览器生成一份对video、audio、canvas等等特性的支持情况的完整报告。

8.HTML Cheat Sheat

Canvas元素是HTML5最重要的元素之一,它可以在网页中绘制图形,非常强大。这是一个Canvas元素的详细速查手册。

9.Lime JS

推荐10款非常优秀的 HTML5 开发工具

LimeJS是一个HTML5游戏开发框架,用于快速构建运行于触屏设备和桌面浏览器的游戏。非常棒,一定要用用试试。

10.HTML5 Reset

推荐10款非常优秀的 HTML5 开发工具

HTML5 Reset是一组文件,包括HTML、CSS等,用于在开始新项目的时候帮助你节省时间,提供HTML5的空白WordPress模板。

Continue reading html5资源

[转]WebTest比拼Selenium:模拟和真实浏览器上的测试

 

作者 Geoffrey Wiseman 译者 乔梁 发布于 2007年11月5日 上午1时24

Web应用软件的功能测试工具有很多种,但它们最根本的差异在于:某些工具可以驱动一个或多个真正的浏览器以便得到完全真实的环境,比如Selenium,而另一些工具只是模拟Web浏览器的操作,比如Canoo WebTest。Marc Guillemot这两种工具进行了对比,根据他的观点,WebTest以13:5的比分获胜。
Marc就以下方面内容对这两种工具进行了对比和评分:

Canoo WebTest

Selenium

Tied

Reports

Browser Fidelity

Testing Ajax

Speed

Beginner Friendly

Integration into Development Process

Support for Badly Formatted HTML Code

Scalability

Multi-Language Support

Capture JS Errors

Documentation

Predictable Behaviour

XPath Support

Extensibility

Data-Driven Tests

Internationalization Support

Support for Non-HTML Content

Marc认为,这些测试不够快,但“WetTest 的工作不多,所有测试都运行在JVM上”。他也提到Selenium无法捕获Javascript错误导致的测试失败:
只要你的单元测试通过了,你就不在意编辑错误了吗?肯定不是!但事实上,Selenium就是这样的,因为它不能检测到你的应用程序中的javascript错误(除非这些测试直接导致测试失败)。
另外,他也提到Ajax 测试(一般来说,大家都认为这是浏览器模拟器的弱点)是一种纽带:
与一般的想法相反,你并不需要在浏览器中运行你的JavaScript测试来测试AJAX功能。HtmlUnit和WebTest可以完成这样的工作,甚至可以称为完全胜任这样的工作,因为它允许更好地测试页内请求,使不可预知的浏览器行为成为可预知的(参见我前一个帖子)。
另一方面,他相信Selenium可以支持多种语言,“Selenium RC可以与不同的开发语言(Java、Ruby、PHP等等)结合,而WebTest只能与Ant结合使用”,还支持不规范的Html以及真实的浏览器:
HtmlUnit对JavaScript支持已经大幅改善,但还不能(且永远不可能)与真正的浏览器行为一模一样。尽管Selenium也更改了一些Web应用的JavaScript正常执行,但它使用真正的浏览器工作,所以已经和浏览器的标准行为相当接近啦。
作为Canoo WebTest和HtmlUnit的首席开发人员,Marc明显倾向于他所接纳的这种形式的工具,在与他讨论之前,请一定要先读一下他的分析报告:
显然,作为WebTest(和HtmlUnit)的负责人,我的确是有倾向性的。但是,我也有多年开发和维护庞大的功能测试套件的经验。客观一点儿说,我可能在其它方向上过分担心了,应该相信Selenium。当然,我将不断地修正我在Selenium理解上的错误。但请您在开始批评我之前,一定要读一下这篇文章。
已经总结了这些反馈。Vitaly认为,WebTest和Selenium的关系可以看作是苹果和桔子的关系。“Selenium,WebTest(HttpUnit),DBUnit,JUnit和其它测试工具是互补的。有些事用这个工具可能完成,用另外一个工具却不成。”还有些人讨论了录制回放和脚本测试各自的优点,以及测试可维护性。Murali推荐使用PragmaticQA Element
Christian反驳了WebTest对Ajax支持的说法,并提及在他的应用中,“由于HtmlUnit不能解析Dojo的import子句,即使最简单的页面也会抛出异常。”
而Simon认为,对浏览器保真度最重要的一点就是:
象 WebTest这样的工具有点太理论化了,它想证明代码完全正常工作,但是只能在理想环境下,与生产环境相去甚远。真正的用户使用的是IE或 Firefox,而Selenium可以让我们在“真实的”条件下做测试,例如有内存泄漏问题的脆弱的浏览器,和不符合标准的代码。
没有客户使用WebTest使用的引擎,这意味着尽管我们知道它在某种环境上运行得很好,但并不意味着真的没有麻烦。相反,我们的Selenium测试运行在Firefox之上,也运行在IE之上,所以它会捕获跨平台使用中发生的很多问题。
最后,Kent Tong设想了结合两种方法的途径
是否可以开发这样一种中间层,即大家只写一套测试,即可以运行在WebTest上,又可以运行在Selenium之上?这样,大家就可以得到WebTest和Selenium各自带来的好处了。
你用过这些工具吗,或者其它功能测试工具?这会吸引你参与讨论下一代功能测试工具吗?更多的信息,请阅读Canoo WebTestSeleniumTesting下一代功能测试工具
英文原文链接:WebTest vs. Selenium: Real and Simulated Browser Testing

相关厂商内容

Web App应用开发者大会火热报名中(4月27日 北京 免费)!
2011年5月11日-13日第十届中国系统与软件过程改进年会
Adobe Flash Builder 4简体中文正式版高速下载

2 条回复

关注此讨论 回复
真实的环境下测试 发表人 胡 凯 发表于 2007年11月5日 上午8时15分

Re: 真实的环境下测试 发表人 blogbin avatar 发表于 2007年11月16日 上午7时7分

按日期倒序排列

  1. 返回顶部
  2. 真实的环境下测试
  3. 2007年11月5日 上午8时15分 发表人 胡 凯
  4. 在项目中有同时使用JWebUnit和Selenium, 虽然每天都在Selenium缓慢的运行中煎熬, 但是依然推荐使用, 进行这样功能测试的目的之一就是希望在所有目标环境中这部分功能都是可以正常工作的。 也就是在真实的条件下作测试, 在JWebunit中正确通过的功能, 能否在IE6/7, firefox,中正确工作? 所有人大概心里都没底。
  5. JWebUnit的速度很快,但是在运行的过程中开发者缺乏对Web项目的最直观的体验, 而且其使用的JS 引擎对于某些正确的js也会抛出异常,后来不得不关闭JWebUnit的javascript engine.
  6. 事实上JWebunit测试可以用做整个开发流程的Checkin gate, 将覆盖基本功能,容易失败的测试用JWebunit完成,在测试通过后就可以提交,然后进行下一步的工作,同时在CI Server上在多个浏览器中运行较为缓慢的Selenium作为acceptance gate。 这大概是能兼顾速度和“真实”的一种方式。
  7. --
  8. Hu Kai
  9. 回复
  10. 返回顶部
  11. Re: 真实的环境下测试
  12. 2007年11月16日 上午7时7分 发表人 blogbin avatar
  13. 是否可以开发这样一种中间层,即大家只写一套测试,即可以运行在WebTest上,
  14. 又可以运行在Selenium之上?这样,大家就可以得到WebTest和Selenium各自带来的好处
  15. 同感:
  16. 测试脚本的设计,开发和维护的工作量相当大,能够让正常跑起来实属不易。
  17. 不同厂商和组织提供许多测试工具,不过这些测试脚本并没有形成统一的标准和规范。

Continue reading [转]WebTest比拼Selenium:模拟和真实浏览器上的测试

hibernate杂项

使用hibernate自动生成工具时 会自动加catorry
如:
<hibernate-mapping>
    <class name="co.iplatform.management.data.Health" table="tservice_health" catalog=”xxx”>
但是往往你刚开始用的数据库名是暂时的,与产品库不一样,所以发布时要注意改正这些名字。( 如果不一致mysql报错却是什么拒绝访问某表,根本不知道是数据库选错了)
一般的不需要catalog比较好,在数据库连接字符串里指定默认数据库就行了。
数据库表名大小写敏感?反正mysql是这样的aBc != abc
乱码问题,数据库要设置好编码, 连接也需要写好编码 例如 :
jdbc:mysql://localhost:13306/moviebug?useUnicode=true&amp;characterEncoding=UTF-8
还不行,则要查找其他原因

--------------------

native sql

以前查询把查询放在事务里面就可以保证取得最新数据,这次在management console里面就遇到问题,调用native sql后查询的还是旧数据。

hibernate说当调用commit或session.flush时会同步数据,网上说commit是先flush在提交。
不管怎样,flush一定会同步数据,这是最保险的做法。

且查询不一定需要放在事务里面(某些情况除外)。

对于使用了native sql的情况,要注意,hibernate并不知道native sql会对数据产生影响,所以,执行了native sql后要session.flush而且要clear。

-------------------------


Continue reading hibernate杂项

爬数据问题

想截取豆瓣的内容 ,发现以下问题 
一般的 网站都有防止被 iframe包含的脚本 ,所以 用iframe不行
我再试 window.open打开窗口来 加载脚本 ,但是
window的 onload事件 不能 监听,可能是跨域 问题 ,那么就做不下去了
-------------------
>

(function() {
function g_log(msg) {
if (!window.mylog_win) {
 window.mylog_win = window.open('', 'log');
}
var doc = window.mylog_win.document;
doc.write(msg + '<br>');
}
function DoubanTask() {
var URL = 'http://movie.douban.com/subject/';
var INDEX_BEGIN = 1000000;
var INDEX_END = 1999999;
var TRYCOUNT = 3;
var tryicount = 0;
var win = window.open('', 'doubanwin');
var url_index = INDEX_BEGIN;
function log (msg) {
 g_log(msg);
};
function getData() {
 var doc = Ext.get(win.document.body);
 var score = doc.query('strong[property=v:average]')
 if (!score || !score.length) {
  log('score not find,return null.');
  return null;
 }
 score = score[0].innerHTML;
 var vote = doc.query('span[property=v:votes]')
 if (!vote || !vote.length) {
  log('score not find,return null.');
  return null;
 }
 vote = vote[0].innerHTML;
 var name = doc.query('span[property=v:itemreviewed]')
 if (!name || !name.length) {
  log('name not find,return null.');
  return null;
 }
 name = name[0].innerHTML;
 var year = doc.query('span[class=year]')
 if (year && year.length) {
  year = year[0].innerHTML;
 }
 var director = doc.query('a[rel=v:directedBy]')
 if (director && director.length) {
  director = director[0].innerHTML;
 }
 if (year) {
  var i0 = year.indexOf('(');
  if (-1 != i0) {
   year = year.substring(i0 + 1);
  }
  i0 = year.indexOf(')');
  if (-1 != i0) {
   year = year.substring(0, i0);
  }
 }
 return {
  score : score,
  vote : vote,
  name : name,
  year : year,
  director : director
 };
}
function onloadfunc(url) {
 var data = getData();
 if (!data) {
  log('retrive no data in [' + url + '],continue.');
  runtask();
  return;
 }
 data.url = url;
 log('get data:' + Ext.encode(data));
 Ext.Ajax.request({
    url : "mytime.ax",
    params : data,
    success : function() {
     tryicount = 0;
     log('submit ok for url:' + url);
     runtask();
    },
    failure : function() {
     tryicount += 1;
     log('submit fail[' + tryicount + '] for url:' + url);
     if (tryicount > TRYCOUNT) {
      tryicount = 0;
      log('cancel try for:' + url
        + ', move for next none.');
      runtask();
     } else {
      log('continue try for:' + url);
      onloadfunc(url);
     }
    }
   });
}
function runtask() {
 url_index += 1;
 if (url_index >= INDEX_END) {
  log('task complete!');
  return;
 }
 var url = URL + url_index;
 //no use, can't work
 win.document.body.onload = function() {
  onloadfunc(url);
 };
 win.location.href = url;
}
this.run = function() {
 runtask();
};
}
function onload() {
var dbTask = new DoubanTask();
var btnRun1 = Ext.get('btnStart');
btnRun1.on('click', function() {
   dbTask.run();
  });
}
Ext.fly(window).on('load', onload);
})();

-------------------------

>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>run.html</title>
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
    <script type="text/javascript" src="../js/ext-core.js"></script>
    <script type="text/javascript" src="js/main.js"></script>
</head>
<body>
 <table>
  <tr><td>
  <button id="btnStart">Start</button>
       
  <td></tr>
  <tr><td><iframe id="frm1"></iframe><td></tr>
 </table>    
</body>
</html>

-------------------------------

换取思路,可以使用ajax请求由服务端通过httpclient取得数据返回给客户端,再由客户端

写到iframe里面,这样就避开了跨域问题了。但是httpclient爬数据时要注意伪装成浏览器,加上请求头'User-Agent' : 'Mozilla/5.0 (Windows NT 5.1; rv:2.0) Gecko/20100101 Firefox/4.0',其余的就不要加了,加了反而会有问题(莫名其妙的返回)

HtmlUnit基于mozila实现,可以考虑

发现豆瓣提供api晕菜

-------------

Continue reading 爬数据问题

window.unload事件

window.unload事件:
用户刷新,关闭,后退,将地址栏重新打一遍(或者只打个回车)都会触发,但是服务端sendredirect则不会.
如果使用window.location.href=window.location.href也会触发
如果window.location.href=window.location.href在脚本第一行,后面的代码还是会执行的,但是页面文档则不会加载了,就是没有dom了。

Continue reading window.unload事件

jmx初步 控制台检监控技术探索

jmx资源:

ibm J2EE专题:
http://www.ibm.com/developerworks/cn/java/j-jee/j2ee-services.html#J2EEZ296
中的jmx部分
其中
http://www.ibm.com/developerworks/cn/java/j-lo-jse63/
这篇比较重要

Oracle的教程与example源代码
http://download.oracle.com/javase/1.5.0/docs/guide/jmx/tutorial/tutorialTOC.html
http://download.oracle.com/javase/1.5.0/docs/guide/jmx/examples.html
http://download.oracle.com/javase/1.5.0/docs/guide/management/agent.html

在其例子Basic中有个问题,rmiServer不好绑定,其原因是缺少LocateRegistry.createRegistry(connectorPort);这一句
具体见 http://www.iteye.com/topic/358379

基本概念:
MBean 规定了标准 MBean 也要实现一个接口,所有向外界公开的方法都要在这个接口中声明。否则,管理系统就不能从中获得相应的信息。此外,该接口的名字也有一定的规范:即在标准 MBean 类名之后加上“MBean”后缀。若 MBean 的类名叫做 MBeansName 的话,对应的接口就要叫做 MBeansNameMBean。

动态MBean要实现DynamicMBean接口。

MXBean(注意多个X)是OpenBean(1.6以后才有官方文档介绍) 
Open MBean 与其它动态 MBean 的唯一区别在于,前者对其公开接口的参数和返回值有所限制 —— 只能是基本类型或者 javax.management.openmbean包内的 ArrayType、CompositeType、TarbularType 等类型。这主要是考虑到管理系统的分布,很可能远端管理系统甚至 MBServer 层都不具有 MBean 接口中特殊的类。

还有个区别,标准mbean要求接口和实现类在同一个包中,而open bean则没有这个要求。[http://blogs.oracle.com/jmxetc/entry/javax_management_standardmbean_when_and] 

Model Bean
具有持久化,日志等功能,但要看具体容器的支持。


jmx客户端和jmx服务端:
客户端通过RMI连接服务端获取信息。
服务端一般是某个容器或服务器的附加功能,它们依据jmx规范写出容器的管理Mbean。tomcat,mule都实现了。

getPlatformMBeanServer是获得已存在的server,一般是本地虚拟机上的

如果注册在 getPlatformMBeanServer上,则可通过增加JVM参数来增加jmx控制,参见http://kazge.com/archives/516.html

这种方式与创建专门的MBeanServer所不同的是自动会包含Platform MBeans(java.lang/com.sun.management)Logging Management(java.util.logging)这些个MBean,参见

http://download.oracle.com/javase/1.5.0/docs/guide/management/overview.html

访问远程jvm的技术jstad:
http://download.oracle.com/javase/6/docs/technotes/tools/share/jstatd.html
注意里面的申明:可能在以后不支持。
NOTE: This utility is unsupported and may or may not be available in future versions of the JDK. It is not currently available on the Windows 98 and Windows ME platforms.
只能监控,不能操作。
需要制定policy -J-Djava.security.policy 和hostname(nat环境下)-Djava.rmi.server.hostname=
否则会有问题
参见
http://hi.baidu.com/passedbylove/blog/item/b600b2a8b6ebc2bacb130cc5.html
http://hi.baidu.com/luohuazju/blog/item/36ddd6103a51b2f6c3ce79c0.html

visualvm用于监测远程机器:
http://java.net/projects/visualvm/content/jmx_connections.html
但是如果远程jvm没有开放监测端口,可使用设置com.sun.management.jmxremote.*参数的办法,让每个你想检测的程序都开放一个检测端口(这个就不太好了,如果一个平台里面有许多应用,那么开那么多的端口本身就很耗资源。)



服务端注册/创建:

         MBeanServer mbs = MBeanServerFactory.createMBeanServer(); 
         String domain = mbs.getDefaultDomain(); 
         
         MemoryMXBean obean = ManagementFactory.getMemoryMXBean(); 
         ObjectName on = new ObjectName(domain+":type=abc"); //名字只是个key,只要客户端与之对应就找得到 
         mbs.registerMBean(obean, on); 

客户端查找:

MemoryMXBean proxy = JMX.newMXBeanProxy(mbsc, stdMBeanName, MemoryMXBean.class); 
//注意上面多了个X,因为是查找Open MBean,其他类型应该使用newMBeanProxy 

监听服务断开事件

>JMXConnector jmxc =...; jmxc.addConnectionNotificationListener(new NotificationListener(){

Continue reading jmx初步 控制台检监控技术探索

window关闭时onunload,onbeforeunload处理

要想在页面跳转时询问用户,需要在onbeforeunload 事件中返回询问字符:

window.onbeforeunload = function(e) {
            return 'Are You Sure To Leave This Page?';
        };

如果在关闭页面时需要做些请求动作,在onunload事件中处理较好:

window.onunload = function() {
            //close function
        };

注意事项:

1:不要试图用addEventListener或attachEvent绑定这两个事件,浏览器不兼容。

2:应该在onbeforeunload 中询问,而将退出动作放在onunload 中,这样逻辑好清晰。

3:如果是ajax请求放在onunload 事件中,需要同步执行ajax,否则是不能保证这个ajax请求会成功的。

Continue reading window关闭时onunload,onbeforeunload处理

【转】单点登录(SSO)—简介

                
单点登录SSO(Single Sign-On)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即 通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。

目前的企业应用环境中,往往有很多的应用系统,如办公自动化(OA)系统,财务管理系统,档案管理系统,信息查询系统等等。这些应用系统服务于企业的信息 化建设,为企业带来了很好的效益。但是,用户在使用这些应用系统时,并不方便。用户每次使用系统,都必须输入用户名称和用户密码,进行身份验证;而且应用 系统不同,用户账号就不同,用户必须同时牢记多套用户名称和用户密码。特别是对于应用系统数目较多,用户数目也很多的企业,这个问题尤为突出。问题的原因 并不是系统开发出现失误,而是缺少整体规划,缺乏统一的用户登录平台,使用SSO技术可以解决以上这些问题。
一、使用SSO的好处主要有
(1)方便用户
用户使用应用系统时,能够一次登录,多次使用。用户不再需要每次输入用户名称和用户密码,也不需要牢记多套用户名称和用户密码。单点登录平台能够改善用户使用应用系统的体验。
(2)方便管理员
系统管理员只需要维护一套统一的用户账号,方便、简单。相比之下,系统管理员以前需要管理很多套的用户账号。每一个应用系统就有一套用户账号,不仅给管理上带来不方便,而且,也容易出现管理漏洞。
(3)简化应用系统开发
开发新的应用系统时,可以直接使用单点登录平台的用户认证服务,简化开发流程。单点登录平台通过提供统一的认证平台,实现单点登录。因此,应用系统并不需要开发用户认证程序。

二、实现SSO的技术主要有
(1) 基于cookies实现,需要注意如下几点:如果是基于两个域名之间传递sessionid的方法可能在windows中成立,在 unix&linux中可能会出现问题;可以基于数据库实现;在安全性方面可能会作更多的考虑。另外,关于跨域问题,虽然cookies本身不跨 域,但可以利用它实现跨域的SSO。
(2)Broker-based(基于经纪人),例如Kerberos等;,cas有基于此的方式
这种技术的特点就是,有一个集中的认证和用户帐号管理的服务器。经纪人给被用于进一步请求的电子的身份存取。中央数据库的使用减少了管理的代价,并为认证 提供一个公共和独立的"第三方"。例如Kerberos、Sesame、IBM KryptoKnight(凭证库思想)等。
(3)Agent-based(基于代理)
在这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序需要设计有不同的功能。比如, 它可以使用口令表或加密密钥来自动地将认证的负担从用户移开。代理被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个"翻译"。例如 SSH等。
(4)Token-based,例如SecurID、WebID、
现在被广泛使用的口令认证,比如FTP,邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用。
(5)基于网关
Agent and Broker-based,这里不作介绍。
(6) 基于安全断言标记语言(SAML)实现,SAML(Security Assertion Markup Language,安全断言标记语言)的出现大大简化了SSO,并被OASIS批准为SSO的执行标准。开源组织OpenSAML 实现了 SAML 规范,可参考http//www.opensaml.org。
三、SUN SSO技术
SUN SSO技术是Sun Java System Access Manager产品中的一个组成部分。
Sun 的新身份管理产品包括Sun Java System Identity Manager、Sun Java System Directory Server Enterprise Edition 和 Sun Java System Access Manager,以上三者为Sun Java Identity Management Suite (身份识别管理套件)的组成部分,它们与Sun Java Application Platform Suite、Sun Java Availability Suite、Sun Java Communications Suite、Sun Java Web Infrastructure Suite组成Java ES。具有革新意义的这一系列产品提供端到端身份管理,同时可与 60 多种第三方资源和技术实现互操作,集成产品可以从SUN公司网站下载,一般以Agent软件方式提供,是业内集成程序最高、最为开放的身份管理解决方案之 一。
在Sun 的新身份管理产品中,Sun Java System Access Manager是基中的一个重要组成部分,Java Access Manager基于J2EE架构,采用标准的API,可扩展性强,具有高可靠性和高可用性,应用是部署在Servlets容器中的,支持分布式,容易部署 且有较低的TCO。通过使用集中验证点、其于角色的访问控制以及 SSO,Sun Java System Access Manager 为所有基于 Web 的应用程序提供了一个可伸缩的安全模型。它简化了信息交换和交易,同时能保护隐私及重要身份信息的安全。
四、CAS 介绍
CAS(Central Authentication Service),是耶鲁大学开发的单点登录系统(SSO,single sign-on),应用广泛,具有独立于平台的,易于理解,支持代理功能。CAS系统在各个大学如耶鲁大学、加州大学、剑桥大学、香港科技大学等得到应 用。
Spring Framework的Acegi安全系统支持CAS,并提供了易于使用的方案。Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全系统能够轻松地适用于复杂的安全需求。Acegi安全系统在国内外得到了广泛的应用, 有着良好的社区环境。
CAS 的设计目标
(1)为多个Web应用提供单点登录基础设施,同时可以为非Web应用但拥有Web前端的功能服务提供单点登录的功能;
(2)简化应用认证用户身份的流程;
(3)将用户身份认证集中于单一的Web应用,让用户简化他们的密码管理,从而提高安全性;而且当应用需要修改身份验证的业务逻辑时,不需要到处修改代码。
CAS 的实现原理
CAS(Central Authentication Server)被设计成一个独立的Web应用。实现原理非常简单。

CAS 创建一个位数很长的随机数(ticket)。CAS把这个ticket和成功登录的用户以及用户要访问的service联系起来。例如,如果用户 peon重定向自service S,CAS创建ticket T,这个ticket T允许peon访问service S。这个ticket是个一次性的凭证;它仅仅用于peon和仅仅用于service S,并且只能使用一次,使用之后马上会过期,即ticket通过验证,CAS立即删除该ticket,使它以后不能再使用。这样可以保证其安全性。
关于ST,在取一个ST时,即使用delete Ticket(ticketId)同时将一次性的ST删除;而对于TGT或PT,则通过reset Timer(ticketId)以更新TGT或PT的时间。在CAS服务端返回的ST中只能得出用户名。
另外,CAS3.0版本也已经发布了,现在最新的版本是3.03,希望CAS3.0在向下兼容的同时,更能向我们提供一些新东西。
SUN SSO 实现原理【项目已经关闭了】
SSO的核心在于统一用户认证,登录、认证请求通过IDENTITY SERVER服务器完成,然后分发到相应应用。
SUN SSO是java Access Manager的一个组成部分,SSO基于Cookie实现解释如下:
(1)Policy Agent on Web or Application Server intercepts resource requests and enforces access control;
(2)Client is issued SSO token containing information for session Validation with Session service.
(3)SSO token has no content- just a long random string used as a handle.
(4)Web-based applications use browser session cookies or URL rewriting to issue SSO token.
(5)Non Web applications use the SSO API(Java/c) to obtain the SSO token to validate the users identity.
SUN SSO 的应用
这里说的应用是指Sun Java System Access Manager的应用。成功应用例子很多,包括德国电信等公司的应用,国内也有大量高校在使用,也有相当多的其它行业的应用。
SUN SSO的开源
Sun 将发布其网络验证与网络单点登录技术,给一项新的开放源代码计划“Open Web Single Sign-On”(Open SSO)。OpenSSO网站位于:[url]https://opensso.dev.java.net/[/url]。 该网站对OpenSSO的概述为:This project is based on the code base of Sun Java(tm) System Access Manager Product, a core identity infrastructure product offered by Sun Microsystems.
OpenSSO 计划的第一部份源代码,将于今年年底完成,基本的版本将于明年3月份发布,而完整的版本可能要等到明年五月份。Sun 采用与Solaris 操作系统相同的共同开发暨流通授权(Common Development and Distribution License)方式。

Continue reading 【转】单点登录(SSO)—简介

ssl概览

SSL(Secure Socket Layer)是一种通信交互协议,由Netscape公司在1994年制定,主要目的就是确保在web 服务器和浏览器之间数据传输安全。SSL协议层是在TCP/IP层和应用层之间。当前TLS(Transport Layer Security)正在逐渐替代SSL(最新版本v3)。
SSL协议分成以下几部分
Record Protocal是SSL的基础层,SSL所有的上层操作都是基于这个层次,这层主要负责消息内容的分段,压缩,加密和数字摘要等操作。
Handshake Protocal故名思义就是握手协议,也是在正式应用数据传输前双方交换加密设置以及认证的流程规范协议。
Change Cipher Spec Protocol是基于record协议层通知远端服务器修改record协议层中安全设置的协议。
Alert Protocol是基于record协议发送警告到远端服务器的协议。
SSL的具体流程图

SSL的流程也体现了对于对称性密钥和非对称性密钥的使用,由于对称性密钥加密比非对称性密钥加密要快1000倍,那么对称性密钥被用来做对内容的加密,而非对称性密钥用来做传递对称性密钥的加密手段。
服务端所需要具备的是一个拥有服务端的标示,公钥私钥对的证书。在握手的流程中,服务端将带有公钥的证书抽取出来发送给客户端,客户端就首先可以判断证 书颁发者是否属于本机受信的CA,如果不是,就会类似于IE跳出提示,如果通过了这部分CA认证,双方就可以通过非对称性加密算法来交换客户端生成的临时 对称密码,进行安全加密信息交互。

Tomcat SSL服务端的配置:(只需要修改一个文件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="D:/work/asf/webservice/src/conf.test/keys/alisoft.jks"
      keystorePass="alisoft" keystoreType="jks" truststoreFile="D:/work/asf/webservice/src/conf.test/keys/alisoft.jks"
      truststorePass="alisoft" truststoreType="jks"/>

< maxHttpHeaderSize="8192" port="8443">
clientAuth没有必要配置成为true,不需要重复反向再认证。如果这个值设为false。其他几个值就是生成的服务端证书库位置及密码。这里 所要注意的就是要求keystore密码和私钥密码一样,因为只有一个配置密码的地方,这在生成公钥密钥对时两者密码写成一致。这样就OK了,直接访问 8443端口就能作为https来访问服务了。

一般不做双向验证,即只是客户端验证服务器,而服务器不去验证客户端:
真正的双向认证,你要再做两步:
1. clientAuth="true".
2. 为你的connector设置truststore, 如果不设置这个,就必须要把证书导入到jre的cacerts里。

因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里的ca来验证你的客户端证书的有效性 (当然这个浏览器就可以做了),如此证书有效,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入 用户名和口令的作用。




. SSL安全协议

SSL 安全协议最初是由Netscape Communication公司设计开发的,又叫“安全套接层(Secure Sockets Layer)协议”,主要用于提高应用程序之间的数据的安全系数。SSL协议的整个概念可以被总结为:一个保证任何安装了安全套接字的客户和服务器间事务安全的协议,它涉及所有TC/IP应用程序。


SSL安全协议主要提供三方面的服务:

用户和服务器的合法性认证
认证用户和服务器的合法性,使得它们能够确信数据将被发送到正确的客户机和服务器上。客户机和服务器都是有各自的识别号,这些识别号由公开密钥进行编号,为了验证用户是否合法,安全套接层协议要求在握手交换数据进行数字认证,以此来确保用户的合法性。

加密数据以隐藏被传送的数据
安全套接层协议所采用的加密技术既有对称密钥技术,也有公开密钥技术。在客户机与服务器进行数据交换之前,交换SSL初始握手信息,在SSL握手情息中采用了各种加密技术对其加密,以保证其机密性和数据的完整性,并且用数字证书进行鉴别。这样就可以防止非法用户进行破译。

保护数据的完整性
安全套接层协议采用Hash函数和机密共享的方法来提供信息的完整性服务,建立客户机与服务器之间的安全通道,使所有经过安全套接层协议处理的业务在传输过程中能全部完整准确无误地到达目的地。

要说明的是,安全套接层协议是一个保证计算机通信安全的协议,对通信对话过程进行安全保护。例如,一台客户机与一台主机连接上了,首先是要初始化握手协议,然后就建立了一个SSL。对话进段。直到对话结束,安全套接层协议都会对整个通信过程加密,并且检查其完整性。这样一个对话时段算一次握手。而HTTP协议中的每一次连接就是一次握手,
因此,与HTTP相比。安全套接层协议的通信效率会高一些。

(1)接通阶段:客户通过网络向服务商打招呼,服务商回应;
(2)密码交换阶段:客户与服务器之间交换双方认可的密码,一般选用RSA密码算法,也有的选用Diffie-Hellmanf和Fortezza-KEA密码算法;
(3)会谈密码阶段:客户与服务商间产生彼此交谈的会谈密码;
(4)检验阶段:检验服务商取得的密码;
(5)客户认证阶段:验证客户的可信度;
(6)结束阶段,客户与服务商之间相互交换结束的信息。

当上述动作完成之后,两者间的资料传送就会加密,另外一方收到资料后,再将编码资料还原。即使盗窃者在网络上取得编码后的资料,如果没有原先编制的密码算法,也不能获得可读的有用资料。

发送时信息用对称密钥加密,对称密钥用非对称算法加密,再把两个包绑在一起传送过去。

接收的过程与发送正好相反,先打开有对称密钥的加密包,再用对称密钥解密。

在电子商务交易过程中,由于有银行参与,按照SSL协议,客户的购买信息首先发往商家,商家再将信息转发银行,银行验证客户信息的合法性后,通知商家付款成功,商家再通知客户购买成功,并将商品寄送客户。


SSL 安全协议是国际上最早应用于电子商务的一种网络安全协议,至今仍然有很多网上商店使用。在传统的邮购活动中,客户首先寻找商品信息,然后汇款给商家,商家将商品寄给客户。这里,商家是可以信赖的,所以客户先付款给商家。在电子商务的开始阶段,商家也是担心客户购买后不付款,或使用过期的信用卡,因而希望银行给予认证。SSL安全协议正是在这种背景下产生的。


SSL协议运行的基点是商家对客户信息保密的承诺。但在上述流程中我们也可以注意到,
SSL协议有利于商家而不利于客户。客户的信息首先传到商家,商家阅读后再传至(银行,这样,客户资料的安全性便受到威胁。商家认证客户是必要的,但整个过程中,缺少了客户对商家的认证。在电子商务的开始阶段,由于参与电子商务的公司大都是一些大公司,信誉较高,这个问题没有引起人们的重视。随着电子商务参与的厂商迅速增加,对厂商的认证问题越来越突出,SSL协议的缺点完全暴露出来。SSL协议将逐渐被新的电子商务协议(例如SET)所取代。

SET和SSL
近年来,IT业界与金融行业一起,推出不少更有效的安全交易标准。主要有:

(1) 安全超文本传输协议(S-HTTP):依靠密钥对的加密,保障Web站点间的交易信息传输的安全性。

(2) 安全套接层协议(SSL协议:Secure Socket Layer)是由网景(Netscape)公司推出的一种安全通信协议,是对计算机之间整个会话进行加密的协议,提供了加密、认证服务和报文完整性。它能够对信用卡和个人信息提供较强的保护。SSL被用于Netscape Communicator和Microsoft IE浏览器,用以完成需要的安全交易操作。在SSL中,采用了公开密钥和私有密钥两种加密方法。

(3) 安全交易技术协议(STT:Secure Transaction Technology):由Microsoft公司提出,STT将认证和解密在浏览器中分离开,用以提高安全控制能力。Microsoft将在 Internet Explorer中采用这一技术。

(4) 安全电子交易协议(SET:Secure Electronic Transaction):SET协议是由VISA和MasterCard两大信用卡公司于1997年5月联合推出的规范。SET主要是为了解决用户、商家和银行之间通过信用卡支付的交易而设计的,以保证支付信息的机密、支付过程的完整、商户及持卡人的合法身份、以及可操作性。SET中的核心技术主要有公开密匙加密、电子数字签名、电子信封、电子安全证书等。

目前公布的SET正式文本涵盖了信用卡在电子商务交易中的交易协定、信息保密、资料完整及数字认证、数字签名等。这一标准被公认为全球网际网络的标准,其交易形态将成为未来“电子商务”的规范。

支付系统是电子商务的关键,但支持支付系统的关键技术的未来走向尚未确定。安全套接层(SSL)和安全电子交易(SET)是两种重要的通信协议,每一种都提供了通过Internet进行支付的手段。但是,两者之中谁将领导未来呢?SET将立刻替换SSL吗?SET会因其复杂性而消亡吗?SSL真的能完全满足电子商务的需要吗?我们可以从以下几点对比作管中一窥:

SSL 提供了两台机器间的安全连接。支付系统经常通过在SSL连接上传输信用卡卡号的方式来构建,在线银行和其他金融系统也常常构建在SSL之上。虽然基于 SSL的信用卡支付方式促进了电子商务的发展,但如果想要电子商务得以成功地广泛开展的话,必须采用更先进的支付系统。SSL被广泛应用的原因在于它被大部分Web浏览器和Web服务器所内置,比较容易被应用。

SET和SSL除了都采用RSA公钥算法以外,二者在其他技术方面没有任何相似之处。而RSA在二者中也被用来实现不同的安全目标。

SET是一种基于消息流的协议,它主要由MasterCard和Visa以及其他一些业界主流厂商设计发布,用来保证公共网络上银行卡支付交易的安全性。SET已经在国际上被大量实验性地使用并经受了考验,
但大多数在Internet上购的消费者并没有真正使用SET。

SET协议保证了电子交易的机密性、数据完整性、身份的合法性和抗否认性。
SET是专门为电子商务而设计的协议,虽然它在很多方面优于SSL协议,但仍然不能解决电子商务所遇到的全部问题。而且,SET遭到有些银行的抵制,其前途如何,尚未得知。

SET 是一个非常复杂的协议,因为它非常详细而准确地反映了卡交易各方之间存在的各种关系。SET还定义了加密信息的格式和完成一笔卡支付交易过程中各方传输信息的规则。事实上,SET远远不止是一个技术方面的协议,它还说明了每一方所持有的数字证书的合法含义,希望得到数字证书以及响应信息的各方应有的动作,与一笔交易紧密相关的责任分担。

Continue reading ssl概览

Pagination


Total views.

© 2013 - 2020. All rights reserved.

Powered by Hydejack v6.6.1