文章插图
五、配置基础验证(Basic Authentication)容器管理验证方法控制着当用户访问受保护的web应用资源时,如何进行用户的身份鉴别 。当一个web应用使用了Basic Authentication(BASIC参数在web.xml文件中auto-method元素中设置),而有用户访问受保护的web应用时,Tomcat将通过HTTP Basic Authentication方式,弹出一个对话框,要求用户输入用户名和密码 。在这种验证方法中,所有密码将被以64位的编码方式在网络上传输 。
注意:使用Basic Authentication通过被认为是不安全的,因为它没有强健的加密方法,除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式(比如,在一个虚拟私人网络中) 。若没有额外的加密方法,网络管理员将能够截获(或滥用)用户的密码 。但是,如果你是刚开始使用Tomcat,或者你想在你的web应用中测试一下基于容器的安全管理,Basic Authentication还是非常易于设置和使用的 。只需要添加 和 两个元素到你的web应用的web.xml文件中,并且在CATALINA_BASE/conf/tomcat-users.xml文件中添加适当的 和 即可,然后重新启动Tomcat 。
下面例子中的web.xml摘自一个俱乐部会员网站系统,该系统中只有member目录被保护起来,并使用Basic Authentication进行身份验证 。请注意,这种方式将有效的代替Apache web服务器中的.htaccess文件 。
<!--Define theMembers-only area,by defininga "Security Constraint"on this Application, andmapping it to thesubdirectory (URL) that we wantto restrict.--><security-constraint><web-resource-collection><web-resource-name>Entire Application</web-resource-name><url-pattern>/members/*</url-pattern></web-resource-collection><auth-constraint><role-name>member</role-name></auth-constraint></security-constraint><!-- Define the LoginConfiguration forthis Application --><login-config><auth-method>BASIC</auth-method><realm-name>My ClubMembers-only Area</realm-name></login-config>六、配置单点登录(Single Sign-On)一旦你设置了realm和验证的方法,你就需要进行实际的用户登录处理 。一般说来,对用户而言登录系统是一件很麻烦的事情,你必须尽量减少用户登录验证的次数 。作为缺省的情况,当用户第一次请求受保护的资源时,每一个web应用都会要求用户登录 。
如果你运行了多个web应用,并且每个应用都需要进行单独的用户验证,那这看起来就有点像你在与你的用户搏斗 。用户们不知道怎样才能把多个分离的应用整合成一个单独的系统,所有他们也就不知道他们需要访问多少个不同的应用,只是很迷惑,为什么总要不停的登录 。
Tomcat 4的“single sign-on”特性允许用户在访问同一虚拟主机下所有web应用时,只需登录一次 。为了使用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素即可,如下所示:
<Valve className="org.apache.catalina.authenticator.SingleSignOn"debug="0"/>在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,即可使用 。那么,任何用户只要登录过一个应用,则对于同一虚拟主机下的所有应用同样有效 。使用single sign-on valve有一些重要的限制:
- value必须被配置和嵌套在相同的Host元素里,并且所有需要进行单点验证的web应用(必须通过context元素定义)都位于该Host下 。
- 包括共享用户信息的realm必须被设置在同一级Host中或者嵌套之外 。
- 不能被context中的realm覆盖 。
- 使用单点登录的web应用最好使用一个Tomcat的内置的验证方式(被定义在web.xml中的 中),这比自定义的验证方式强,Tomcat内置的的验证方式包括basic、digest、form和client-cert 。
- 如果你使用单点登录,还希望集成一个第三方的web应用到你的网站中来,并且这个新的web应用使用它自己的验证方式,而不使用容器管理安全,那你基本上就没招了 。你的用户每次登录原来所有应用时需要登录一次,并且在请求新的第三方应用时还得再登录一次 。
- 当然,如果你拥有这个第三方web应用的源码,而你又是一个程序员,你可以修改它,但那恐怕也不容易做 。
- 单点登录需要使用cookies 。
推荐阅读
- Java程序员必备的一些流程图
- Java的常用API之System类简介
- Java的常用API
- 1分钟帮你了解自己适不适合当一个程序员
- 什么是JavaScript的变量提升?
- JavaScript setTimeout要理解
- 如何确定JavaScript中this的指向?这里有5中常见的分类
- 汽车车主必备的5个用车冷知识,好多是人为的行车安全隐患
- 如何泡好红茶 泡制好喝红茶的必备因素
- 什么是SWOT、6W2H?深度解析管理者必备的7大管理工具!实用干货