![]() 图一 JAAS概览 |
LoginContext lc = new LoginContext("MyExample"); try { lc.login(); } catch (LoginException) { // Authentication failed. } // Authentication successful, we can now continue. // We can use the returned Subject if we like. Subject sub = lc.getSubject(); Subject.doAs(sub, new MyPrivilegedAction()); |
Application { ModuleClass Flag ModuleOptions; ModuleClass Flag ModuleOptions; ... }; Application { ModuleClass Flag ModuleOptions; ... }; ... |
Sample { com.sun.security.auth.module.NTLoginModule Rquired debug=true; } |
![]() 图二 JAAS的配|文? |
public void initialize(Subject subject, CallbackHandler callbackHandler, Map sharedState, Map options) { this.subject = subject; this.callbackHandler = callbackHandler; this.sharedState = sharedState; this.options = options; url = (String)options.get("url"); driverClass = (String)options.get("driver"); debug = "true".equalsIgnoreCase((String)options.get("debug")); } |
Example { RdbmsLoginModule required driver="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/jaasdb?user=root" debug="true"; }; |
ConsoleCallbackHandler cbh = new ConsoleCallbackHandler(); LoginContext lc = new LoginContext("Example", cbh); lc.login(); |
public boolean login() throws LoginException { if (callbackHandler == null) throw new LoginException("no handler"); NameCallback nameCb = new NameCallback("user: "); PasswordCallback passCb = new PasswordCallback("password: ", true); callbacks = new Callback[] { nameCb, passCb }; callbackHandler.handle(callbacks); String username = nameCb.getName(); String password = new String(passCb.getPassword()); success = rdbmsValidate(username, password); return(true); } |
public void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException { for (int i = 0; i Q?callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback nameCb = (NameCallback)callbacks[i]; System.out.print(nameCb.getPrompt()); String user=(new BufferedReader(new InputStreamReader(System.in))).readLine(); nameCb.setName(user); } else if (callbacks[i] instanceof PasswordCallback) { PasswordCallback passCb = (PasswordCallback)callbacks[i]; System.out.print(passCb.getPrompt()); String pass=(new BufferedReader(new InputStreamReader(System.in))).readLine(); passCb.setPassword(pass.toCharArray()); } else { throw(new UnsupportedCallbackException(callbacks[i], "Callback class not supported")); } } } |
String user = request.getParameter("user"); String pass = request.getParameter("pass"); PassiveCallbackHandler cbh = new PassiveCallbackHandler(user, pass); LoginContext lc = new LoginContext("Example", cbh); |
public void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException { for (int i = 0; i Q?callbacks.length; i++) { if (callbacks[i] instanceof NameCallback) { NameCallback nameCb = (NameCallback)callbacks[i]; nameCb.setName(user); } else if(callbacks[i] instanceof PasswordCallback) { PasswordCallback passCb = (PasswordCallback)callbacks[i]; passCb.setPassword(pass.toCharArray()); } else { throw(new UnsupportedCallbackException(callbacks[i], "Callback class not supported")); } } } } |
Qsystem-property java.security.auth.login.config="/resin/conf/jaas.config"/Q? |
(tng) (tng) (tng) 随着开源Y件的行Q出C(jin)很多新兴工具与服务来帮助企业识别开源Y件中的代码知识权。这些Y件或者是从互联网上免费下载下来的Q或者是通过传统贸易方式从其他企业那儿买来的?/p>
(tng) (tng) (tng) 黑鸭软g公司QBlack Duck Software Inc.Q在2004q?月推Z(jin)protexIP/development 开发Y件和服务Q此后又推出?jin)protexIP/license management许可理软g和服务。前者能帮助开发h员识别开源Y件的状况Q判断是否存在许可冲H问题;而后者主要针对律师和公司法律部门Q帮助他们识别开源Y件的许可是否?x)涉及(qing)到他们客户的代码,或者他们客户希望购买的代码?/p>
(tng) (tng) (tng) 当管理层考虑收购一家公司或者一家公司的资Ӟ他们不希望存在未被发现的法律地雷Q泰斯塔公司QTestaQ专利和知识产权业务部门的合伙h大卫·拜尔QDavid ByerQ说。泰斯塔公司是一家位于L士顿QBostonQ的法律公司Q隶属于赫维茨与蒂柏?dng)律师事务所QHurwitz & Thibeault LLCQ。“我们就曄睹过整个交易谈判因ؓ(f)收购者不x担风险而被q中止的情况。”拜?dng)说。除?jin)风险外Q另一个原因是如果q些被收购的财存在法律归属的问题,被收购方的胦(ch)产就?x)贬倹{?/p>
(tng) (tng) (tng) 那些可以从网上直接免费下载而无需通过公司采购渠道采购的开源Y件日益流行,增加?jin)公司Y件收购与使用的法律风险。ؓ(f)?jin)确保其律师团队能帮助客户减轻这c风险,泰斯塔公司正在测试protexIP/license management和protexIP/development软g?/p>
(tng) (tng) (tng) 黑鸭软g公司有一个包含超q?00个开源Y件许可的数据库。泰斯塔公司的律师用protexIP/license management软gQ就可以把其客户所希望购买的Y件的代码与黑鸭Y件公司的数据库做比较Q看看这些代码是否在许可的范围之内。依拉¯凡(Ira HeffanQ介l,律师们也可以用黑鸭Y件公司的软g来运行源代码Q确定源代码与包含在开源应用程序中代码之间的相似性。赫凡是泰斯塔公怸利和知识产权业务部门的高U合伙hQ同时也是公司开源Y件特别小l的成员。该特别组由来自公司多个业务部门的15位律师的律师l成。他们所研究的开源问题,涉及(qing)到Y件开发、知识权R犯、风险资本融资中的知识权尽责调查、ƈ购交易和股票首次公开发行?/p>
(tng) (tng) (tng) 更危险的情况是,一家公司在开发环境中引入受到通用公共许可证(General Public LicenseQ保护的软gQ但自己q不知道Q这其Y件代码免费向开源社区开放,其中一些代码很可能是公司独家开发的Q赫凡说?/p>
(tng) (tng) (tng) 购买protexIP/license management软g许可的h(hun)格是每两个用?,500元。protexIP/license management软g?qing)服务必M黑鸭软g公司的protexIP/development软g一起用,后者的h是每五个用户1.25万美元。ProtexIP/license management软g使用的数据库Q与黑鸭软g公司在其protexIP/development软g服务中用的一致?/p>