动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.详解J2EE与IBM对象关系的数据库.
.如何实现真正的J2EE便携式应用.
.Swing 破局:打造半透明窗口.
.Eclipse配置SQLExplorer访问数据.
.Struts测试框架StrutsTestCase实.
.XML——连接SQL和Web程序的桥梁(.
.漫谈EJB对面向对象设计的影响.
.java版的SHA-1.
.在S1AS7中配置MySQL(支持CMP).
.JBuilder2005实现重构之杂项重构.
.Java基础-Java语言的Socket类详.
.Java Socket编程(三)-2.
.Java进阶学习:网络服务器编程.
.利用 Velocity 模板引擎制作网站.
.利用jConfig获取xml文件中的配置.
.百分之百纯Java(TM)-如何翻译Ja.
.Java学习:了解什么叫做JavaBean.
.成为GUI的最好的朋友并揭开Liar .
.setHours 方法.
.与JBuilder2007的第一次亲密接触.

J2EE的安全认证机制

发表日期:2008-1-5 |



  实现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应用程序使用该区域,应用程序的认证机制是基于表单的。
  授权
  一旦用户被识别后,容器就会得到认证用户的安全角色,看用户是否属于在部署描述符中的<auth-constraint>标志中定义的安全角色之一。假如用户不属于任何一个安全角色,则容器会返回一个错误。
  部署描述符(web.xml)的<security-constraint>标志定义了被保护的Web资源和能够访问这些资源的安全角色清单。
  <security-constraint>
  <web-resource-collection>
  <web-resource-name>AdminPages</web-resource-name>
  <description> Accessible by authorised users </description>
  <url-pattern>/admin/*</url-pattern>
  <http-method>GET</http-method>
  </web-resource-collection>
  <auth-constraint>
  <description>These are the roles who have access</description>
  <role-name>manager</role-name>
  </auth-constraint>
  </security-constraint>
  Web窗口在网页层次上执行认证。然而,商业性应用程序可能还希望对一个网页内的功能进行认证,这会要求在应用程序中定义一些新的附加的与应用程序有关的安全角色。为了控制对功能的访问,应用程序需要理解角色的权限概念。Web容器标准没有解决权限的问题。
  由于授权角色是动态的,开发人员经常会感到迷惑,即这些安全角色是否需要添加到部署描述符中。为了使应用程序充分利用安全支持,Web容器只需要在部署描述符中定义的一个角色。因此,应用程序可以定义一个高层次的角色,然后将所有的用户都指派给该角色。这将使该角色中的所有用户都拥有能够访问Web资源的权限。
  另外,应用程序还可以定义额外的角色,执行对一种Web资源中较低层次的功能的授权。由于应用程序已经配置有一个包含应用程序中所有用户的高层次安全角色,这些低层次的安全角色也就不需要在部署描述符中进行定义。这使得Web应用程序能够利用容器的授权支持,实现与指定应用程序有关的授权。
  我们可以在部署描述符中为所有用户定义一个高层次的治理员角色,保护治理类Web资源,这使得治理员角色中的所有用户都能够访问治理网页。为了控制治理网页中的其他功能,我们可以在应用程序中创建 sysadmin或appadmin等新的角色。
  应用程序可以对这些安全角色进行扩展,使它们拥有一定的权限。然后,应用程序可以使用这些权限来控制对其功能的访问。
  尽管与特定应用程序相关的安全角色不是定义在部署描述符中的,这些角色仍然可以在isUserInRole方法中使用,判定用户是否在这些安全角色中。
  优点
  ·Web应用程序无需实现认证机制,简化Web应用程序的配置。
  ·Web应用程序能够使用getRemoteUser、IsUserInRole和getUserPrincipal方法实现有规划的安全。
  ·Web应用程序能够将认证信息传播给EJB容器。
  在Tomcat中配置数据库安全区域
  1、创建用户表。
  该数据库表需要有username和password二个字段。
  create table users (username varchar(20) not null, password(20) not null)
  2、创建角色表
  该表维护着应用程序中角色的清单,它仅仅有rolename一个字段。
  create table roles (rolename varchar(20) not null)
  3、创建用户-角色关联表
  该表维护着一个用户和各个角色之间的关联,一个用户可以属于一个或多个角色。
  create table user_roles (username varchar(20) not null, rolename varchar(20) not null)
  4、在表中插入数据
  insert into users values('user1', 'password')
  insert into role values('manager')
  insert into user_roles values('user1', 'manager')
  5、创建用户表。
  该数据库表需要有username和password二个字段。
  create table users (username varchar(20) not null, password(20) not null)
  6、创建角色表
  该表维护着应用程序中角色的清单,它仅仅有rolename一个字段。
  create table roles (rolename varchar(20) not null)
  7、创建用户-角色关联表
  该表维护着一个用户和各个角色之间的关联,一个用户可以属于一个或多个角色。
  create table user_roles (username varchar(20) not null, rolename varchar(20) not null)
  8、在表中插入数据
  insert into users values('user1', 'password')
  insert into role values('manager')
  insert into user_roles values('user1', 'manager')
  9、通过将下面的信息拷贝到{tomcat}\conf\文件夹的server.xml文件中,配置Tomcat。(本例使用了薄客户端驱动程序,Tomcat使用内存区域作为缺省的安全区域。)
  <Realm
  className="org.apache.catalina.realm.JDBCRealm"
  debug="99"
  driverName="oracle.jdbc.driver.OracleDriver"
  connectionURL="jdbc:oracle:thin:@{IP address}:{Port}:{Servicename}"
  connectionName="{DB Username}"
  connectionPassword="{Password}"
  userTable="users"
  userNameCol="username"
  userCredCol="password"
  userRoleTable="user_roles"
  roleNameCol="rolename"
  />
  用环境变量替换下面的值:
  {
上一篇:开发完整J2EE解决方案的八个步骤 人气:531
下一篇:Servlet中的Listener的应用 人气:1294
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成