http://www.yesky.com/20020628/1618084.shtml
解决方案 »
- struts1.x+hibernate3.2实现用户登录与注册的问题,数据库用sql server 2005
- 求助!关于Tomcat6.0虚拟目配置和启动问题
- 请教关于EJB用途问题
- struts2 又jsp向action传值问题.
- 急,高分求助,关于WebSphere4部署的问题
- 如何用POI3.0生成WORD文档
- 有没有struts+ibatis入门的例子介绍?
- 求struts标签的例子?
- 100分求celipse+myeclipse中配置Mysql的问题 不够可以另开贴
- 用ant+jboss+mysql部署CMP时出错,请高手帮忙
- 如何在struts框架下实现购物车(急!!!)
- 急救:Stack size too large 是什么错误?请帮忙,不甚感激
<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应用程序使用该区域,应用程序的认证机制是基于表单的
准备工作:当然是写一个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"那必须两人都签了名名才行,只有其一是不予通过的。
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。