帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE的安全认证机制
作者:佚名 发布时间:2005-04-02 来源:不详
 
  实现Web应用程序的安
J2EE中,Web容器支持应用
全机制是Web应用程序的设计人
程序内置的安全机制。
员和编程人员必须面对的任务。在

  Web应用程序的安全机
认证机制:基本认证、基于
数的Web应用程序都使用基
安全角色对应用程序的Web
制有二种组件:认证和授权。基
表单的认证、相互认证。由于能
于表单的认证。Web容器使用在W
资源的访问进行授权。
于J2EE的Web容器提供三种类型的
够对认证用户界面进行定制,大多
eb应用程序的部署描述符中定义的

  在使用基于表单的认证机制中,应用程序的设计人员和开发人员会遇到3类问题:      
  ·基于表单的认证如何
的,因为许多组织已经在数
与数据库和LDAP等其他领域的安
据库和LDAP表单中实现了认证机
全机制协同工作。(这是非常必要
制。)
  ·如何在Web应用程序的部署描述符
(web.xml)中增加或删除军政府的授权角色。
  ·Web容器在Web资源层次上进行授权
上的授权。
;应用程序则需要在单一的Web资源中执行功能层次

  尽管有许多与基于表单
多数的应用程序都以自己的
的认证有关的文档和例子,但都
方式襀安全机制。
没有能够阐明这一问题。因此,大

  本篇文章说明了基于表单的认证如何
协作的问题。它还解释了Web窗口如何使
角色,保护Web资源中的功能。
与其他方面的安全机制,尤其是数据库中的安全机制
用安全角色执行授权以及应用程序如何扩展这些安全

  基于表单的认证                                                                
  基于表单的认证能够使
了认证机制的类型、登录的
开发人员定制认证的用户界面。
URI和错误页面。
web.xml的login-config小节定义

  <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_password,表单将这二个值发送给j_se
令的字段,它们必须被分别命名为j_username和
curity_check逻辑名字。
  下面是一个该表单如何在HTML网页中实现的例子:                              
  <form method="POST" action="j_s
ecurity_check">
  <input type="text" name="j_username">    

  <input type="passwo
rd" name="j_password">
  </form>                                                               
  除非所有的连接都是在
源被访问时,Web容器就会
SSL上实现的,该表单能够透露
激活为该资源配置的认证机制。
用户名和口令。当受保护的Web资

  为了实现Web应用程序的安全,Web容器执行下面的步骤:                      
  1、在受保护的Web资源被访问时,判断用户是否被认证。                        
  2、如果用户没有得到认证,则通过
供安全信任状。
重定向到部署描述符中定义的注册页面,要求用户提

  3、根据为该容器配置的安全领域,确认用户的信任状有效。                        
  4、判断得到认证的用
户是否被授权访问部署描述符(
web.xml)中定义的Web资源。
  象基本的安全认证机制
全区域。也就是说,它不明
安全区域认证用户方面引起
那样,在Web应用程序的部署描
确地定义用来认证用户的安全区
混淆。
述符中,基于表单的认证不指定安
域类型,这就会在它使用什么样的

  要对用户进行验证,Web窗口需要完成下面的步骤:                              
  1、判断该容器配置的安全区域。                                                
  2、使用该安全区域进行认证。                                                  
  由于数据库和LDAP在维护信息方面提
用它们维护安全认证和授权信息。
供了更大的灵活性,因此大多数组织都会希望继续使

  许多Web窗口都支持不
Web容器中,server.xml将
同类型的安全区域:数据库、LD
数据库配置为其安全区域。
AP和定制区域。例如,在Tomcat

  <Realm                                                                 
  className="org.apache.catalina.r
ealm.JDBCRealm"
  debug="99"                                                          

  driverName="oracle.j
dbc.driver.OracleDriver"
  connectionURL="jdbc:
oracle:thin:@{IPAddress}:{Po
rt}:{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)的<securit
访问这些资源的安全角色清单。
y-constraint>标志定义了被保护的Web资源和能够

  <security-constraint>                                    
  <web-resource-collection>                            
  <web-resource-name>AdminPages
</web-resource-name>
  <description> acce
ssible 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 acce
ss</description>
  <role-name>manager</role-name>                  
  </auth-constraint>                                          
  </security-constraint>                                  
  Web窗口在网页层次上执行认证。然
进行认证,这会要求在应用程序中定义一
对功能的访问,应用程序需要理解角色的
而,商业性应用程序可能还希望对一个网页内的功能
些新的附加的与应用程序有关的安全角色。为了控制
权限概念。Web容器标准没有解决权限的问题。
  由于授权角色是动态的,开发人员常
描述符中。为了使应用程序充分利用安全
色。因此,应用程序可以定义一个高层次
该角色中的所有用户都拥有能够访问Web
常会感到迷惑,即这些安全角色是否需要添加到部署
支持,Web容器只需要在部署描述符中定义的一个角
的角色,然后将所有的用户都指派给该角色。这将使
资源的权限。
  另外,应用程序还可以
由于应用程序已经配置有一
角色也就不需要在部署描述
现与指定应用程序有关的授
定义额外的角色,执行对一种We
个包含应用程序中所有用户的高
符中进行定义。这使得Web应用
权。
b资源中较低层次的功能的授权。
层次安全角色,这些低层次的安全
程序能够利用容器的授权支持,实

  我们可以在部署描述符
,这使得管理员角色中的所
们可以在应用程序中创建 s
中为所有用户定义一个高层次的
有用户都能够访问管理网页。为
ysadmin或appadmin等新的角色
管理员角色,保护管理类Web资源
了控制管理网页中的其他功能,我

  应用程序可以对这些安
用这些权限来控制对其功能
全角色进行扩展,使它们拥有一
的访问。
定的权限。然后,应用程序可以使

  尽管与特定应用程序相
isUserInRole方法中使用,
关的安全角色不是定义在部署描
判断用户是否在这些安全角色中
述符中的,这些角色仍然可以在

  优点                                                                          
  ·Web应用程序无需实现认证机制,简化Web应用程序的配置。                  
  ·Web应用程序能够使
规划的安全。
用getRemoteUser、IsUserInRol

e和getUserPrincipal方法实现有

  ·Web应用程序能够将认证信息传播给EJB容器。                              
  在Tomcat中配置数据库安全区域                                            
  1、创建用户表。                                                              
  该数据库表需要有username和password二个字段。                  
  create table users (username var
char(20) not null, password(20) not null)
  2、创建角色表                                                                
  该表维护着应用程序中角色的清单,它仅仅有rolename一个字段。            
  create table roles (
rolename varchar(20) not nul
l)
  3、创建用户-角色关联表                                                      
  该表维护着一个用户和各个角色之间的关联,一个用户可以属于一个或多个角色。      
  create table user_ro
not null)
les (username varchar(20) no

t null, rolename varchar(20)

  4、在表中插入数据                                                            
  insert into users values('user1'
, 'password')
  insert into role values('manager')          
  insert into user_rol
es values('user1', 'manager'
)
  5、创建用户表。                                                              
  该数据库表需要有username和password二个字段。                  
  create table users (username var
char(20) not null, password(20) not null)
  6、创建角色表                                                                
  该表维护着应用程序中角色的清单,它仅仅有rolename一个字段。            
  create table roles (
rolename varchar(20) not nul
l)
  7、创建用户-角色关联表                                                      
  该表维护着一个用户和各个角色之间的关联,一个用户可以属于一个或多个角色。      
  create table user_ro
not null)
les (username varchar(20) no

t null, rolename varchar(20)

  8、在表中插入数据                                                            
  insert into users values('user1'
, 'password')
  insert into role values('manager')          
  insert into user_rol
es values('user1', 'manager'
)
  9、通过将下面的信息拷贝到{tomcat
(本例使用了薄客户端驱动程序,Tomcat
}conf文件夹的server.xml文件中,配置Tomcat。
使用内存区域作为缺省的安全区域。)
  <Realm                                                                 
  className="org.apache.catalina.r
ealm.JDBCRealm"
  debug="99"                                                          

  driverName="oracle.j
dbc.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"                                 
  />                                                                          
  用环境变量替换下面的值:                                                      
  {IP Address} ━━数据库服务器的IP地址                          
  {Port} ━━端口号                                                      
  {Servicename} ━━服务名字                                      
  {DB Username} ━━数据库登录                                    
  {Password} ━━数据库登录的口令                                    
  10、将Oracle的薄客户机驱动程序JA
{tomcat_home}/server/lib目录中。
R文件或数据库的JDBC驱动程序拷贝到

  11、用下面的安全约束配置Web应用程序的部署描述符                          
  <security-constraint>                                    
  <web-resource-collection>                            
  <web-resource-name>Protected A
rea</web-resource-name>
  <!-- 定义需要被保护的URL -->                                      
  <url-pattern>/*</url-pattern>                    
  <http-method>DELETE</http-method>            
  <http-method>GET</http-method>                  
  <http-method>POST</http-method>                
  <http-method>PUT</http-method>                  
  </web-resource-collection>                          
  <auth-constraint>                                            
  <role-name>manager</role-name>                  
  </auth-constraint>                                          
  <user-data-constraint><transp
ort-guarantee>
  NONE</transport-guarantee></u
ser-data-constraint>
  </security-constraint>                                  
  <!-- 缺省的登录配置使用基于表单的认证 -->                            
  <login-config>                                                  
  <auth-method>FORM</auth-method>                
  <realm-name>Exampl
e Form-Based Authentication
Area</realm-name>
  <form-login-config>                                        
  <form-login-page>/
jsp/login.jsp</form-login-p
age>
  <form-error-page>/jsp/error.js
p</form-error-page>
  </form-login-config>                                      
  </login-config>                                                
   需要注意的是,<auth-constraint
角色之一。
>中<role-name>的值应当是用户-角色关联表中中

  在Tomcat中配置例子文件                                                  
  1、使用上面介绍的命令配置Tomcat。                                      
  2、下载security-form-based.war文
件,并将它拷贝到Tomcat的webapps目录。
  3、启动Tomcat服务器                                                    
  4、打开一个浏览器,输入下面的地
no}/security-form-based/protected/in
址:http://{ip address:port
dex.jsp
  5、输入用户名和口令。                                                        
  在WebLogic中配置数据库安全区域                                        
  配置Web应用程序的部
WebLogic的配置描述符之间
需要下面的小节:
署描述符,这一过程与在Tomcat
的一个差别是,WebLogic配置描

中配置非常相似。Tomcat和
述符要求下面的小节,而Tomcat不


  <security-role>                                                
  <description>                                                    
  Manager security role                                    
  </description>                                                  
  <role-name>                                                        
  manager                                                                
  </role-name>                                                      
  </security-role>                                             
  结论                                                                          
  通过本篇文章,读者应该会对基于表
证有个比较深刻的认识。Web应用程序能
许使用以前的安全认证机制。
单的认证、以及它如何与数据库安全区域配合进行认
够利用基于表单的认证机制,保护它的资源,同时允

  另外,本篇文章还描述了J2EE Web提
署描述符的情况下如何定义新的安全角色
供的授权支持层次,以及在不修改Web应用程序的部



  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·.NET真的战胜了J2EE吗?  (2005-04-02)
 ·J2EE应用中与Oracle数据库的连接  (2005-04-02)
 ·构建高性能J2EE应用的10个技巧  (2005-04-02)
 ·J2EE的13种核心技术  (2005-04-02)
 ·J2EE体系结构设计(2)  (2005-04-02)
 ·从商业角度分析J2EE与WINDOWS DN  (2005-04-02)
 ·XML和J2EE的完美结合  (2005-04-02)
 ·11本入门到精通J2EE书籍推荐  (2005-04-02)
 ·小心进行 J2EE Web Services 的测  (2005-04-02)
 ·AOP如何与J2EE实行高效的无缝结合  (2005-04-02)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统