`
jian0487
  • 浏览: 96147 次
  • 性别: Icon_minigender_1
  • 来自: 宁德
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多

编写JSP和Servlet是容易的,但通常我们会面临很多安全问题。当然,我们会在程序中加入大量的安全代码来解决这个问题,但加入这样的安全硬编码将使程序变得不灵活,而且不易维护。因此,在本文中将给出一种无需修改代码即可达到安全目的方法,并提供了一个实例进行说明。

 
    在本文中的例子将通过一个用户名和密码以及传输层的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文件的部分内容:
   
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <security-constraint> < web-resource-collection> <web-resource-name>Servlet Application </web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>ttrole</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL </transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>default</realm-name> </login-config> <security-role> <role-name>ttrole</role-name> </security-role>
 
    在上述的例子中,只有用户"ttrole"才能访问Servlet和JSP页。
 
    在Java EE环境中将使用这些用户验证,但在许多操作系统环境中,用户和组关联。因此,security-role-mapping在用户头组之间提供了一座桥梁。在Java EE 5应用服务器中,我们可以在sun-application.xml文件中按如下的方式字义security-role-mapping标签:
 
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> <sun-application> <security-role-mapping> <role-name>myrole</role-name> <principal-name>myuser</principal-name> </security-role-mapping> <security-role-mapping> <role-name>ttrole</role-name> <group-name>ttgroup</group-name> </security-role-mapping> <security-role-mapping> <role-name>arole</role-name> <principal-name>ttuser</principal-name> </security-role-mapping> </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与Filter的使用

    ### Servlet与JSP与Filter的使用详解 #### 一、Servlet与JSP的...Filter作为连接点,增强了应用程序的安全性和功能性,同时简化了代码的管理和维护。理解并熟练运用这些技术,对于开发高质量的Web应用程序至关重要。

    四个jar包commons-io+logging+pool+javax-servlet-jsp-jstl

    通过使用 Commons Logging,开发者可以在部署时根据需求选择最适合的日志解决方案,而无需更改代码。 Apache Commons Pool(commons-pool-1.5.6.jar)是一个通用的对象池服务,用于创建对象池,管理对象的生命周期...

    jsp、Servlet做的固定资产

    Servlet通过HTTP协议与客户端通信,增强了Web应用的功能和灵活性。 **Ajax(Asynchronous JavaScript and XML)** Ajax技术使得Web应用能够实现异步更新,即在不刷新整个页面的情况下,只更新部分网页内容。在固定...

    基于JSP的简单学生信息管理系统

    【基于JSP的简单学生信息管理系统】是一种使用JavaServer Pages(JSP)技术和...通过合理的权限分配和数据操作,确保了系统的功能性和安全性。这个项目对于学习和理解JSP、Servlet和数据库集成是一个很好的实践案例。

    servlet jar 文件

    它们可以在特定事件(如应用启动、请求到达、会话创建等)发生时执行代码,增强了应用的灵活性和可扩展性。 3. **过滤器(Filters)**:Servlet 2.3引入了过滤器的概念,允许开发者在请求到达Servlet之前对请求和...

    servlet3.0规范

    在Servlet 3.0中,开发者可以使用注解(@WebServlet、@WebFilter、@WebListener)来声明Servlet、Filter和监听器,而无需在web.xml中进行繁琐的XML配置。这大大减少了部署描述符的复杂性,使得代码更易读、更易于维护...

    servlet-api-2.5-6.1.4.jar.zip(125 k).ZIP

    Servlet API是Java Web开发中的核心组件,主要用于处理HTTP请求并响应客户端。...Servlet API 2.5版本引入了许多增强功能,如注解配置、异步处理和更强的安全性,极大地提升了开发效率和应用性能。

    论坛短消息系统,JSP实现

    5. **安全性**:系统需要确保用户隐私,例如,只有发件人和收件人才能查看相关消息。这需要在设计时考虑加密和授权机制,以防止未经授权的访问。 **移植性实现:** 为了实现良好的移植性,开发人员可能会遵循一些...

    图书管理系统jsp

    在开发过程中,还需要考虑异常处理和安全性问题。对可能出现的SQL注入、空指针异常等进行预防,使用预编译的PreparedStatement来防止SQL注入,对用户输入进行校验,避免非法字符和数据。 总结 通过Eclipse和JSP,...

    基于JSP的javaweb学生管理系统

    8. **安全性和权限控制**: 系统可能包含了登录验证和权限控制机制,确保只有授权的用户才能访问和修改数据。这可能通过session管理、cookie技术或基于角色的访问控制(RBAC)实现。 9. **AJAX和jQuery**: 为了...

    JSP文件管理器v1.001

    总的来说,JSP文件管理器v1.001是一个基于Servlet和JSP的实用工具,它结合了这两者的优点,为Web开发者提供了方便的文件操作界面,增强了网站的功能。开发者需要理解Servlet和JSP的基础知识,以及如何使用它们来处理...

    JavaServlet2.3帮助文档

    7. **安全性增强**:Servlet2.3增加了安全相关的特性,如SSL/TLS支持,以及对HTTP基本和摘要认证的支持,有助于构建安全的Web服务。 8. **会话跟踪**:除了cookies之外,Servlet2.3还提供了基于URL重写和HTTP状态码...

    动态网页打造利器_JSP.pdf

    - **代码安全性**:JSP的Servlet代码在服务器端执行,增强了代码的安全性,相较于ASP的源代码暴露于客户端,JSP提供了更佳的保护。 - **跨平台能力**:由于JSP代码运行在Java虚拟机(JVM)上,这意味着相同的JSP应用...

    servlets and jsp

    5. **丰富的标签库**:JSP提供了一系列内置标签,如`&lt;jsp:include&gt;`、`&lt;jsp:param&gt;`等,这些标签可以用来增强页面的功能性和可读性。 #### 章节二:深入了解Servlet方法 Servlet定义了一组标准的方法,包括`init()...

    JSP固定资产管理系统

    而“JSP固定资产管理系统”便是一个专为此目标设计的应用程序,它采用Java Server Pages(JSP)技术进行开发,无需依赖特定的框架,具有高度的灵活性和可扩展性。 JSP是一种动态网页技术,它允许开发者在HTML页面中...

    JSP源码JSP+ACCESS网上拍卖平台系统(源代码+论文)

    3. **数据库设计**:合理设计数据库表结构,确保数据的有效性和一致性。例如,可以使用外键约束来维护数据之间的关联性。 4. **安全性考虑**:加强系统的安全性设计,如使用HTTPS协议加密传输数据、对敏感信息进行...

    图书管理系统(jsp+sql server)

    由于提供了强大的查询能力和事务处理能力,SQL Server能确保数据的安全性和一致性。描述中提到的数据库附加上SQL Server,意味着用户可以直接使用SQL Server管理工具连接数据库,无需额外的设置步骤。 数据库的用户...

Global site tag (gtag.js) - Google Analytics