知识大全 安全技术 Java与安全性,第2部分二

Posted

篇首语:没有理想,那些所谓的奋斗都是空话。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 安全技术 Java与安全性,第2部分二相关的知识,希望对你有一定的参考价值。

安全技术 Java与安全性,第2部分二  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  PrivilegedAction    任何实现PrivilegedAction接口的类都封装了一些代码 Java客户端可以在由已填充的Subject定义的安全上下文中运行这些代码 在这种安全上下文下调用已授权动作之前 weblogic security Security runAs( )方法允许客户端把一个Subject与当前线程相关联      示例JAAS客户端    让我们考察一下如何构建一个能够为WebLogic对自身进行身份验证的JAAS客户端 我们将使用从上至下的方法讲述这个例子 从JAAS客户端需要实现的内容开始 然后再细分为其实现的单个组件 让我们从主类SimpleJAASClient开始 采取以下步骤     它从命令行读取用户名 密码和URL作为输入参数     它尝试连接到特定的URL 然后使用所提供的用户名和密码对客户端进行身份验证     它在新获得的已验证对象下执行一个已授权的动作 例 列出了我们的JAAS客户端的源代码     例 列出了我们的JAAS客户端的源代码     例 示例JAAS客户端    package oreilly wlguide security jaas;  import javax security auth Subject;  import javax security auth login LoginContext;  public class SimpleJAASClient   public static void main(String[] args)   String username = args[ ];  String password = args[ ];  String url = args[ ];  LoginContext loginContext = null;  // Create a LoginContext using our own CallBackHander  try   loginContext = new LoginContext( Simple   new SimpleCallbackHandler(username password url));   catch (Exception e)   // Can get a SecurityException or a LoginException  e printStackTrace( );  System exit( );    // Now authenticate If we don t get an exception we succeeded  try   loginContext login( );   catch (Exception e)   // Can get FailedLoginException AccountExpiredException   // or CredentialExpiredException  e printStackTrace( );  System exit( );    // Retrieve authenticated subject and perform action using it  Subject subject = loginContext getSubject( );  SimpleAction simpleAction = new SimpleAction(url);  weblogic security Security runAs(subject simpleAction);        注意我们是如何突出JAAS客户端的重点部分的 我们的第一个关键步骤是建立LoginContext对象     loginContext = new LoginContext( Simple new SimpleCallbackHandler(username password url));    LoginContext对象使用将在JAAS身份验证期间使用的CallBackHandler和LoginModule实例初始化了客户端 构造器带的第二个参数是我们自己的CallBackHandler实例 LoginModule将使用它来获得用户证书 以及将对我们的客户端进行身份验证的WebLogic实例的URL     构造器带的第一个参数是Simple 用于为客户端查找适当的LoginModule JAAS客户端依赖于一个配置文件 该配置文件把JAAS登录模块的名称映射为它们的实现 而且还指定了另外的参数 例 列出了我们使用的JAAS配置文件     例 登录配置文件nfig    Simple   weblogic security auth login UsernamePasswordLoginModule  required  ;    我们的配置文件包含一个Simple入口 在给定用户名和密码的基础上为身份验证指定了WebLogic的LoginModule weblogic security auth login UsernamePasswordLoginModule 当运行JAAS客户端时 必须使用一个系统属性指定该配置文件的位置 下面说明了如何运行我们的示例JAAS客户端     java Djava secnfig=nfig oreilly wlguide security jaas SimpleJAASClient system pssst t :// :   /    这样 我们就可以配置LoginContext以使用WebLogic的 LoginModule 它支持使用用户名-密码组合的身份验证 稍后 我们将看一看如何使用JAAS配置文件透明地使用LoginModule实现来代替这种方法     建立登录上下文之后 我们调用了loginContext login( )方法来执行实际的登录 我们的LoginContext将利用已配置的登录模块和回调处理对象 并尝试借助服务器对客户端进行身份验证 如果客户端成功通过身份验证 可以从LoginContext获得已验证的主题     Subject subject = loginContext getSubject( );    这个已验证Subject上的getPrincipals( )方法将获得与用户相关的所有主体 例如 如果我们的JAAS客户端使用系统管理员的证书进行身份验证 已验证的Subject将具有两个主体 代表用户的system 和代表用户的组的Administrators 现在 我们可以使用这个主题来执行一个或多个 已授权 的操作 换句话说 这些操作是在这个已验证主题的上下文中执行的     weblogic security Security runAs(subject simpleAction);    这里给出一个忠告——客户端必须调用WebLogic的Security类上的runAs( )方法 runAs( )方法带有两个参数 已验证的Subject和一个PrivilegedAction对象 后者包装了应用程序与服务器的特定交互 例 说明了我们的JAAS客户端希望执行的操作     例 一个非常简单的操作    package oreilly wlguide security jaas;  import java security PrivilegedAction;  import java sql Connection;  import java util Hashtable;  import javax naming Context;  import javax naming InitialContext;  import javax sql DataSource;  public class SimpleAction implements PrivilegedAction   private static final String JNDI_NAME = jdbc xpetstore ;  private String url;  public SimpleAction(String url)   this url = url;    public Object run( )   Object obj = null;  try   Context ctx = null;  Hashtable ht = new Hashtable( );  ht put(Context INITIAL_CONTEXT_FACTORY    weblogic jndi WLInitialContextFactory );  ht put(Context PROVIDER_URL url);  // Get a context for the JNDI lookup  ctx = new InitialContext(ht);  // do any work here  DataSource ds =(javax sql DataSource) ctx lookup(JNDI_NAME);  //    catch (Exception e)   e printStackTrace( );    return obj;        在这里 需要考虑以下重点     类实现 java security PrivilegedAction接口 然后 任何JAAS 客户端都可以在已验证Subject的上下文中调用这个类的一个实例     run( )方法封装了客户端与服务器的交互 通常 客户端将建立一个JNDI上下文 使用它来获取绑定到JNDI树的资源 然后调用/访问这些资源 在前面的例子中 我们使用了JNDI上下文来获得JDBC数据源     当我们在PrivilegedAction run( )方法中建立JNDI上下文时 我们没有为JNDI身份验证提供任何用户证书 JAAS客户端提供已验证的Subject给runAs( )方法 确保PrivilegedAction对象是在这个主题的上下文中调用的 也就是说 runAs( )方法负责把已验证的主题与当前线程关联起来     例 列出了我们的CallBackHandler类的源代码 通常 回调处理程序将与客户端交互 提示用户输入用于身份验证的用户名和密码 在我们的简单JAAS客户端的例子中 我们提供了必需的证书和URL给我们的回调处理程序的构造器 这样回调便可容易地返回这些信息     例 一个简单的回调处理器    package oreilly wlguide security jaas;    import javax security auth callback Callback;  import javax security auth callback CallbackHandler;  import javax security auth callback NameCallback;  import javax security auth callback PasswordCallback;  import javax security auth callback UnsupportedCallbackException;  import weblogic security auth callback URLCallback;    public class SimpleCallbackHandler implements CallbackHandler   private String username = null;  private String password = null;  private String url = null;    public SimpleCallbackHandler(String pUsername String pPassword String pUrl)   username = pUsername; password = pPassword; url = pUrl;      public void handle(Callback[] callbacks)  throws java io IOException UnsupportedCallbackException   for (int i = ; i < callbacks length; i++)   if (callbacks[i] instanceof NameCallback)   NameCallback nc = (NameCallback) callbacks[i];  nc setName(username);   else if (callbacks[i] instanceof URLCallback)   URLCallback uc = (URLCallback) callbacks[i];  uc setURL(url);   else if (callbacks[i] instanceof PasswordCallback)   PasswordCallback pc = (Pa cha138/Article/program/Java/gj/201311/27631

相关参考

知识大全 安全技术 Java与安全性,第2部分一(图)

安全技术Java与安全性,第2部分一(图)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Pri

知识大全 安全技术 Java与安全性,第1部分一

安全技术Java与安全性,第1部分一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  WebLog

知识大全 Java理论与实践: 描绘线程安全性[2]

Java理论与实践:描绘线程安全性[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  线程安全

知识大全 Java理论与实践: 描绘线程安全性[1]

Java理论与实践:描绘线程安全性[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  定义线程

知识大全 Java开发中的线程安全选择与Swing

Java开发中的线程安全选择与Swing  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Swin

知识大全 java与android之间的安全通讯

  实际上就是非对称密钥加密RSA  但为什么不使用jca这些java自带的呢?因为android是非sun的虚拟机其实现方法有不同在现实使用中老是报错而且网上几乎没有资料谈到这些所以干脆自己写纯ja

知识大全 基于Java 2运行时安全模型的线程协作

基于Java2运行时安全模型的线程协作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Java

知识大全 面向Java开发人员的Scala指南: 构建计算器,第 2 部分

面向Java开发人员的Scala指南:构建计算器,第2部分  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 Java的线程安全四种方式五个等级[2]

Java的线程安全四种方式五个等级[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

鱼类越冬温室抗雪减灾技术

(一)功能与用途采取综合技术措施确保养殖鱼类安全越冬,是渔业生产抗雪减灾的重要环节。(二)技术简介1.及时扫除积雪防止温室、大棚倒塌,确保人员、养殖鱼类和养殖设施安全,确保养殖品种安全越冬。  2.加