无需修改代码增强Servlet和JSP的安全性

开发 后端
本文介绍无需修改代码增强Servlet和JSP的安全性,以及设置XML文件和运行实例代码。

编写Servlet和JSP是容易的,但通常我们会面临很多安全问题。当然,我们会在程序中加入大量的安全代码来解决这个问题,但加入这样的安全硬编码将使程序变得不灵活,而且不易维护。因此,在本文中将给出一种无需修改代码即可达到安全目的方法,并提供了一个实例进行说明。
 
在本文中的例子将通过一个用户名和密码以及传输层的SSL来保护应用程序的war文件。用户名和密码以明文在网络中传输。这一切并不需要编辑应用程序中的Java代码和JSP页。而为了使Servlet和JSP页变得安全,我们要做的只是配置web.xml文件而已。
 
一.设置XML文件
 
配置web.xml文件的***步是定义一个安全约束,也就是一个<security-constraint>标签。这个标签将保护响应的URL,以使特定的用户才能访问它。注意我们必须要使用<http-method>标签定义一个或多个HTTP方法。如果你想让安全约束应用到所有的HTTP方法,那么只要简单的忽略<http-method>标签即可。
 
做完上面的设置后,下一步需要设置SSL。我们可以使用<user- data-constraint>标签以及这个标签的一个子标签<transport-guarantee>来设置。却将<transport-guarantee>的值设置成CONFIDENTIAL。
 
***一步我们需要设置验证方法。这需要设置<login-config>标签以及子标签<auth-method>。在这里我们将<auth-method>设为BASIC。下面是web.xml文件的部分内容:

  1. <security-constraint> 
  2.       < web-resource-collection> 
  3.          <web-resource-name>Servlet Application  
  4.          </web-resource-name> 
  5.          <url-pattern>/*</url-pattern> 
  6.       </web-resource-collection> 
  7.       <auth-constraint> 
  8.          <role-name>ttrole</role-name> 
  9.       </auth-constraint> 
  10.       <user-data-constraint> 
  11.          <transport-guarantee>CONFIDENTIAL  
  12.          </transport-guarantee> 
  13.       </user-data-constraint> 
  14.    </security-constraint> 
  15.    <login-config> 
  16.       <auth-method>BASIC</auth-method> 
  17.       <realm-name>default</realm-name> 
  18.    </login-config> 
  19.  
  20.    <security-role> 
  21.       <role-name>ttrole</role-name> 
  22.   </security-role> 

在上述的例子中,只有用户"ttrole"才能访问Servlet和JSP页。
 
在Java EE环境中将使用这些用户验证,但在许多操作系统环境中,用户和组关联。因此,security-role-mapping在用户头组之间提供了一座桥梁。在Java EE 5应用服务器中,我们可以在sun-application.xml文件中按如下的方式字义security-role-mapping标签:

  1. <sun-application> 
  2.      <security-role-mapping> 
  3.        <role-name>myrole</role-name> 
  4.        <principal-name>myuser</principal-name> 
  5.      </security-role-mapping> 
  6.      <security-role-mapping> 
  7.        <role-name>ttrole</role-name> 
  8.        <group-name>ttgroup</group-name> 
  9.      </security-role-mapping> 
  10.      <security-role-mapping> 
  11.        <role-name>arole</role-name> 
  12.        <principal-name>ttuser</principal-name> 
  13.      </security-role-mapping> 
  14.    </sun-application> 

二、运行实例代码

在这一节我们来讲一下如何运行上面的程序。在这里我们使用的集成开发环境是NetBeans IDE 5.5以及NetBeans企业开发包。在安装完NetBeans后,我们需要进行以下几步来运行这个程序。

1. 首先我们需要下载这个程序,下载连接为:例子代码。 然后将其解压。

2. 启动NetBeans。

3. 打开webann工程(刚才zip文件中的NetBeans工程),如果出现一个" Resolve missing server problem"提示信息,说明应用服务器还没有被加到NetBeans的服务器列表中。我们可以选择Tools > Server Manager,然后将相应的服务器加到列表中。

4. 启动Sun内嵌在NetBeans中的Java System Application Server。我们还可以通过在命令中输入如下的命令来启动服务器:
<appserv_install_dir>/bin/asadmin start-domain domain1
上面的<appserv_install_dir>是应用服务器的安装目录。

5. 建立一个用户。我们可以通过管理控制台来完成的(默认是http://localhost:4848),可按以下步骤操作:
(1) 从左侧的管理树中选择Configuration > Security > Realms > file。
(2) 单击"Manage Users",然后单击"New"。
(3) 输入以入信息。
User Id: ttuser
Group List: ttgroup
New Password: ttpassword
Confirm New Password: ttpassword
(4) 单击"OK",保存设置。

在建立***个用户后,使用同样的方式建立第二个用户ttusers2,输入信息如下:
User Id: ttuser2
Group List: ttgroup
New Password: ttpassword
Confirm New Password: ttpassword
 
6. 按着以下步骤编译NetBeans工程:
(1) 右击工程窗口的webann节点。
(2) 选择"Clean and Build Project"。
在这个步骤中将建立ear文件,并将它们放到webann/dist目录中。
 
7. 按着以下步骤发布ear文件:
(1) 右击工程中的webann节点。
(2) 选择"Deploy Project"。
 
除了上述的发布方法,我们还可以按以下的方式通过管理界面发布:
(1) 在左侧的控制树中选择Applications > Enterprise Applications。
(2) 单击"Deploy"。
(3) 单击"Browser"按钮找到ear文件
(4) 单击"OK"。
 
我们还可以通过如下的命令行发布ear文件:
asadmin deploy webann.ear
 
8.下面我们启动浏览器,在地址栏中输入https://<host>:<port/webann,在这里<host>是主机名,如果是本机,就是"localhost",<port>是HTTPS的端口,如8181。
 
可能由于浏览器的不同,所看到的验证信息不同,但一般会出现一个"unknown authority",这是因为这个例子使用了self-sign验证。然后浏览器将会出现一个选项,提示您是否继续浏览应用程序。
 
如果我们选择继续浏览应用程序,系统将会提示我们输入用户名和密码。如果我们使用ttuser登录,将会看到类似如下的响应信息:
Hello, ttuser
Ejb Message: Hello, World, Sat Jun 30 12:04:46 PDT 2007
DataSource login timeout: 0

如果我们使用ttuser2登录,将会看到类似如下的响应信息:
Hello, ttuser2
DataSource login timeout: 0

之所以它们的响应信息不同是因为它们所角色不同,用户ttuser拥有"ttrole"和"arole"。而ttuser2只有"ttrole",而没有"arole"。在这个应用程序中,只有拥有角色"arole"的用户可以调用SlessLocal.hello(String message)方法,这个方法返回一个"Hello, World"信息。

当我们运行完这个程序后,可以按着如下的步骤卸载ear文件:
1.通过管理界面面卸载ear文件。
(1) 在左侧的功能树中选择Applications > Enterprise Applications
(2) 选择"webann",然后单击"Undeploy"。
 
2. 通过管理界面面删除用户。
(1) 选择Configuration > Security > Realmn > file
(2) 单击"Manage Users"。
(3) 选择ttuser和ttuser2。
(4) 单击"Delete"。

【编辑推荐】

  1. 如何提升Servlet和JSP应用程序的效率
  2. Flex和Jsp之间中文参数的传递
  3. 简单介绍JSP数据库链接
  4. 我国IPTV研究目全球领先
  5. 3G与IPTV是发展大方向
责任编辑:佚名 来源: IT168
相关推荐

2022-09-28 11:10:22

区块链数据安全

2022-03-29 23:59:03

Linux安全发行版

2009-07-07 13:29:33

Servlet和JSP

2023-07-30 15:00:21

2020-08-05 09:22:39

安全技术数据

2009-11-06 13:57:52

2012-05-30 09:34:57

2020-07-26 00:34:21

物联网安全物联网IOT

2009-07-03 14:02:51

2011-05-24 09:15:52

SSH

2021-12-14 10:05:45

VMware灾难恢复虚拟化

2012-06-05 13:31:05

2023-06-19 10:31:08

LPWAN物联网

2020-05-13 20:35:05

物联网安全技术

2010-11-24 11:37:51

2009-06-16 15:23:53

2022-06-27 15:07:32

安全意识终端用户行为网络安全

2009-07-06 15:34:56

JSP和Servlet

2009-11-06 09:59:55

2009-11-30 09:41:38

点赞
收藏

51CTO技术栈公众号