http://www.yesky.com/20020628/1618084.shtml

解决方案 »

  1.   

    实现Web应用程序的安全机制是Web应用程序的设计人员和编程人员必须面对的任务。在J2EE中,Web容器支持应用程序内置的安全机制。  Web应用程序的安全机制有二种组件:认证和授权。基于J2EE的Web容器提供三种类型的认证机制:基本认证、基于表单的认证、相互认证。由于能够对认证用户界面进行定制,大多数的Web应用程序都使用基于表单的认证。Web容器使用在Web应用程序的部署描述符中定义的安全角色对应用程序的Web资源的访问进行授权。  在使用基于表单的认证机制中,应用程序的设计人员和开发人员会遇到3类问题:  ·基于表单的认证如何与数据库和LDAP等其他领域的安全机制协同工作。(这是非常必要的,因为许多组织已经在数据库和LDAP表单中实现了认证机制。)  ·如何在Web应用程序的部署描述符(web.xml)中增加或删除军政府的授权角色。  ·Web容器在Web资源层次上进行授权;应用程序则需要在单一的Web资源中执行功能层次上的授权。  尽管有许多与基于表单的认证有关的文档和例子,但都没有能够阐明这一问题。因此,大多数的应用程序都以自己的方式襀安全机制。  本篇文章说明了基于表单的认证如何与其他方面的安全机制,尤其是数据库中的安全机制协作的问题。它还解释了Web窗口如何使用安全角色执行授权以及应用程序如何扩展这些安全角色,保护Web资源中的功能。  基于表单的认证  基于表单的认证能够使开发人员定制认证的用户界面。web.xml的login-config小节定义了认证机制的类型、登录的URI和错误页面。<login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
    <form-login-page>/login.jsp</form-login-page>
    <form-error-page>/fail_login.html</form-error-page>
    </form-login-config>
    </login-config>  登录表单必须包含输入用户姓名和口令的字段,它们必须被分别命名为j_username和j_password,表单将这二个值发送给j_security_check逻辑名字。  下面是一个该表单如何在HTML网页中实现的例子:<form method="POST" action="j_security_check">
    <input type="text" name="j_username">
    <input type="password" name="j_password">
    </form>   除非所有的连接都是在SSL上实现的,该表单能够透露用户名和口令。当受保护的Web资源被访问时,Web容器就会激活为该资源配置的认证机制。  为了实现Web应用程序的安全,Web容器执行下面的步骤:  1、在受保护的Web资源被访问时,判断用户是否被认证。  2、如果用户没有得到认证,则通过重定向到部署描述符中定义的注册页面,要求用户提供安全信任状。  3、根据为该容器配置的安全领域,确认用户的信任状有效。  4、判断得到认证的用户是否被授权访问部署描述符(web.xml)中定义的Web资源。  象基本的安全认证机制那样,在Web应用程序的部署描述符中,基于表单的认证不指定安全区域。也就是说,它不明确地定义用来认证用户的安全区域类型,这就会在它使用什么样的安全区域认证用户方面引起混淆。  要对用户进行验证,Web窗口需要完成下面的步骤:  1、判断该容器配置的安全区域。  2、使用该安全区域进行认证。  由于数据库和LDAP在维护信息方面提供了更大的灵活性,因此大多数组织都会希望继续使用它们维护安全认证和授权信息。  许多Web窗口都支持不同类型的安全区域:数据库、LDAP和定制区域。例如,在Tomcat Web容器中,server.xml将数据库配置为其安全区域。<Realm 
    className="org.apache.catalina.realm.JDBCRealm" 
    debug="99"
    driverName="oracle.jdbc.driver.OracleDriver"
    connectionURL="jdbc:oracle:thin:@{IPAddress}:{Port}:{Servicename}"
    connectionName="{DB Username}"
    connectionPassword="{Password}"
    userTable="users" 
    userNameCol="username" 
    userCredCol="password"
    userRoleTable="user_roles" 
    roleNameCol="rolename" 
    />   Tomcat的server.xml的<Realm>标志定义了窗口用来识别一个用户的安全区域的类型。注意,容器对Web应用程序使用该区域,应用程序的认证机制是基于表单的 
      

  2.   

    Applet中数字签名的具体实现细节:
    准备工作:当然是写一个Applet,其中涉及到对本地文件的读或写操作用于测试目的。可以先予以执行,想必应该是会抛出java.security.AccessControlException的。
    下面实现签名:(代码本身无须任何更改)
    注:下面所使用的keytool或jarsigner命令只存在与Java2中,1.1中为javakey.且二者的安全模型有很大的差异,故务必首先确定你所使用SDK的版本。
    (1)使用keytool命令建立自己的密钥库并生成X.509自签名证书。
    下列的命令很长时间都不使用了,具体参数什么的都忘完了,故只给出大概的参数,至于具体用法请参阅文档。
    keytool -genkey -alias xiewuhen(这里似乎应该是密钥库的项目);
    下面按照提示一步步进行下去即可。
    (2)把Applet类文件打包成jar.
    (3)利用jarsigner签名jar文件。
    jarsigner applet.jar xiewuhen(这个applet.jar是你要签名的jar文件,xiewuhen是你前面在密钥库中生成的项目)
    (4)检查jar文件,在meta-inf目录下应该会出现两个新文件,xiwehen.SF,xiwuhen.DSA.
    注意xiewuhen这个密钥项目只是事例,具体是什么依赖你最初使用keytool所生成的项目。其中SF文件是签名文件,是一个ASCII文件,保存了签名过程中使用的摘要算法。DSA文件是一个二进制文件,保存了签名和数字证书。最后一点就是文件扩展名具体是DSA还是RSA取决你使用的签名算法,默认是DSA,可以在keytool参数中指定RSA算法。
    (5)若你是在单机且只有一个密钥库的机器上测试,下一个步骤可以省略因为这牵涉到证书的导入导出的问题。由于你签名方和验证方共用同一个密钥库,那证书就无须导来导去了。但为了模拟真正的环境,所以还是建议在多机上测试或建立多个密钥库。
    (6)使用keytool -export -file -alias等一系列参数将证书导出,保存成crt格式,可以在流览器中配置该证书。但我们暂不考虑这种情况。再次使用keytool -import -file -alias命令将证书导入验证方的密钥库。注意alias指定的别名务必和生成时的一模一样。
    (7)修改策略文件。该文件位于主目录的/lib/security/中,是java.seucrity文件。至于你的Java主目录是什么,可以查看java.home系统属性。
    (8)如下修改策略:
    //指定的的密钥库路径。type目前只能是JKS(Sun的默认实现),可以省略。
    keystore "keystoreURL","keystoreType";
    grant signedBy "xiwuhen" codeBase "这里指定Applet的装入URL,若是文件URL须在前面加上file: 注意这里务必不可省略,否则Applet就会共享其他的策略了"{
    permission java.io.FilePermission "autoexec.bat","read";
    //上面的权限只是一个例子,依据你的要求给出具体策略。
    };
    没了!就这么多了。最后还有一点就是Applet可以有许多人顺序签名,若是那样的话,signedBy中的各个签名者之间是和的关系,而不是或。也就是说比如signedBy "a,b"那必须两人都签了名名才行,只有其一是不予通过的。
      

  3.   

    http://www.csdn.net/develop/Read_Article.asp?id=21945
    http://dyer.51.net/blogarchives/computer/000154.html
    http://www-900.ibm.com/developerWorks/cn/java/j-pj2ee9/index.shtml
    http://www.yesky.com/20030114/1648365.shtml
    http://www.jdon.com/jive/article.jsp?forum=46&thread=5513
    http://www.javaworld.com/javaworld/jw-05-2002/jw-0524-signon.html
    http://plateau.sicool.com/article/jaas/struts_jaas_filter.htm
    http://www.ccw.com.cn/htm/center/prog/02_7_2_4.asp
    http://www-900.ibm.com/developerWorks/cn/java/j-jaas/
    以上是我所收集的所有关于jaas的资料了。
    jaas验证很容易,不过授权就有一些麻烦了。你可以参考chinaxp的论坛源码,他们使用了jaas。