技术开发 频道

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



    【IT168 专稿】
  编写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文件的部分内容:
   
<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标签:
 
<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>
0
相关文章