Struts 2应用程序安全功能的配置详解

简介:

安全性是Web应用程序开发工作中最关键的问题之一。在基于servlet的应用程序里,保护应用程序资源的办法有两种:一是对应用程序进行配置(web.xml),二是使用Java代码硬编码到程序中。前一种方法使用配置文件,该方法很灵活,这是因为通过使用配置文件,无需改写任何代码就可以改变安全策略,是一种常见的手段。而Struts 2是基于servlet技术的,所以Struts 2的安全策略也可以使用配置文件进行灵活的配置。 

  配置安全策略时,有两个概念需要清楚的区分 ,用户和角色,简单的说用户为使用计算机的人,可以是个人或组织。角色是一个抽象的概念,泛指职务或者权限。例如,张三,李四,王五三个人,有职员、主管和经理三个职务(权限),张三是用户,张三可以是主管职务,代表张三这个用户含有主管的权利。

  不同的servlet容器所提供的用户和角色管理机制是不相同的。我使用的是Tomcat服务器,它提供的用户和角色管理机制文件是在其安装目录下的conf目录中的tomcat-users.xml文件,可以在这个文件里完成对用户和角色的编辑。例如:

< tomcat - users >
    
< role rolename = " tomcat " />
    
< role rolename = " role1 " />
    
< user username = " tomcat "  password = " tomcat "  roles = " tomcat " />
    
< user username = " both "  password = " tomcat "  roles = " tomcat,role1 " />
    
< user username = " role1 "  password = " tomcat "  roles = " role1 " />
</ tomcat - users >

  这个文件定义了2个角色(tomcat和role1)和3名用户(tomcat、both和role1)。你可以在tomcat-users.xml文件里定义任意多个用户和角色。

  使用Struts 2保护应用程序的资源

  Struts 2应用程序的安全策略是通过部署web.xml文件中的security-constraint元素实现的,该元素的语法定义:

<! ELEMENT security - constraint (display - name ? , web - resource - collection + , auth - constraint ? , user - data - constraint ? ) >
<! ELEMENT display - name (#PCDATA) >
<! ELEMENT web - resource - collection (web - resource - name, description ? , url - pattern * , http - method * ) >
<! ELEMENT auth - constraint (description ? , role - name * ) >
<! ELEMENT user - data - constraint (description ? , transport - guarantee) >

   该语法说明了,security-constraint元素可以有一个可选的display-name子元素,至少一个web-resource-collection子元素,一个可选的auth-constraint子元素和一个可选的user-data-constraint子元素。

  web-resource-collection子元素是用来列出打算保护的Web资源,具体的做法是为这些资源设置URL限制,它是通过设置web-resource-collection元素包含的子元素实现的:

  ①web-resource-name:是与受保护资源相关联的名称。该子元素为必须元素。

  ②description:对给定资源的描述。这个子元素为可选元素。

  ③url-pattern:用来设置URL表达式,与这个URL表达式相匹配的URL地址指向的资源将受到保护。该子元素为至少有一个,为必须元素。

  ④http-method:用来表明哪些HTTP方法将受到限制,例如设置为GET那么所有的GET请求就将受到限制。该元素为可选元素。

  auth-constraint元素用于指定可以访问该资源用户角色集合。如果没有指定auth-constraint元素,就将安全约束应用于所有角色。它包含下面几个子元素:

  ①description:描述。该元素是可选元素。

  ②role-name:可以访问保护资源的用户角色。该元素可以有多个。

  user-data-constraint元素用来设置怎样保护在客户端和Web容器之间传递的数据。

  ①description: 描述。可选元素。

     ②transport-guarantee :该元素有以下几个值

     NONE,这意味着应用不需要传输保证。

    INTEGRAL,意味着服务器和客户端之间的数据必须以某种方式发送,而且在传送中数据不能被篡改。

     CONFIDENTIAL,这意味着传输的数据必须加密。

  配置完毕security-constraint元素的基本信息,大致为下面的格式:

< security - constraint >
    
< web - resource - collection >
        
< web - resource - name > Admin Arew </ web - resource - name >
        
< url - pattern >* .action </ url - pattern >
     </ web - resource - collection >
    
< auth - constraint >
        
< role - name > myeclipseWeb </ role - name >
     </ auth - constraint >
</ security - constraint >

         这个security-constraint元素的效果为:只要与表达式"*.action"匹配的请求不是来自拥有"myeclipseWeb"权限的用户,Web容器就会阻断它。在这里还可以使用http-method元素,阻断特定方法的请求,因为没有使用会阻断所有方法提交的请求。

  设置完安全策略后,还需要设置让用户有机会提供证明,证明自己有权限访问这个受限资源的登陆方法。允许使用的登陆方法使用login-config元素设置,下面为login-config元素的语法定义:

<! ELEMENT login - config (auth - method ? , realm - name ? , form - login - config ? ) >
<! ELEMENT auth - method (#PCDATA) >
<! ELEMENT realm - name (#PCDATA) >
<! ELEMENT form - login - config (form - login - page, form - error - page) >

   login-config子元素的描述如下:

   auth-method指定用来验证用户身份的方法。它的值为下面的一个:BASIC、DIGEST、FORM或 CLIENT-CERT

   realm-name指定HTTP Basic验证中在标准登陆框中显示的一条提示。

  form-login-config元素是在元素值为"FORM"时使用的。它是指定基于表单的登录中应该使用的登录页面和出错页面。如果没有使用基于表单的验证,则忽略这些元素。这个元素的定义如下,其中form-login-page用于指定显示登录页面的资源路径, form-error-page则用于指定用户登录失败时显示出错页面的资源路径。

<! ELEMENT form - login - config (form - login - page, form - error - page) >
<! ELEMENT form - login - page (#PCDATA) >
<! ELEMENT form - error - page (#PCDATA) >

  设置完登陆方法后,还应该使用security-role元素,注册允许用来访问受保护资源所有角色。在该元素内部使用一个role-name子元素来注册一个角色。例如:

< security - role >
    
< role - name > myeclipseWeb </ role - name >
</ security - role >

  注册了一个"myeclipseWeb"的角色。










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/735598,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
XML 存储 JSON
framework 的配置文件在.netcore里面不能用怎么处理?在.netcore中创建.xml配置文件
framework 的配置文件在.netcore里面不能用怎么处理?在.netcore中创建.xml配置文件
27 0
|
安全 JavaScript 前端开发
08dwr - web.xml配置(测试模式配置)
08dwr - web.xml配置(测试模式配置)
56 0
|
安全 Java 测试技术
SpringBoot配置文件数据加密自定义开发详解
本章将对SpringBoot配置文件中的数据加密做自定义开发. 在SpringBoot开发过程中配置文件是明文存放在application.yml或者application.properties文件中,这种配置方式会带来一定的安全隐患,本章将对这个问题提出一个简单的解决方案。
|
XML 敏捷开发 应用服务中间件
WEB核心【Servlet配置和注解重构用户登录】第八章
本篇章主要讲Servlet,两个重点:Servlet路径配置,Servlet注解开发,了解内容Servlet继承数及生命周期,Servlet路径配置,ServletConfig配置
WEB核心【Servlet配置和注解重构用户登录】第八章
|
JSON Java 测试技术
Springboot 系列(七)web 开发之异常错误处理机制剖析
Springboot 系列(七)web 开发之异常错误处理机制剖析
606 0
Springboot 系列(七)web 开发之异常错误处理机制剖析
|
XML C# 数据格式
C#应用程序配置文件
C#应用程序配置文件
118 0
C#应用程序配置文件
|
Web App开发 Java 数据库
|
Java 缓存
09 Struts2 实现文件上传下载
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710554 文件上传对Struts2来说是一件非常容易的事情。
1136 0
|
XML Java Apache
配置struts-2.5.16必需jar包Struts2的特性变动
1、jar包的变动 必需jar包,旧版本:    必需jar包,新版本:    在struts-2.5.16版本的lib目录下没有xwork-core的jar包,原因是被合并到struts-core这个jar里了。
2046 0
|
Java Spring
[Spring] Web层AOP方式处理登录和权限问题
参考: [Spring] Web层AOP方式进行参数校验 方法一样,只是把原来登陆和权限校验放在了AOP方法里。 用户权限是存放在session里的。 另外,如果登录时需要在注解里传入角色字段,可以用@Around("aopMethod() && @annotation(loginRequired)")实现。
1013 0