我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何配置Struts 2应用程序的安全功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何配置Struts 2应用程序的安全功能

小编给大家分享一下如何配置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元素是在<auth-method>元素值为"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"的角色。

演示示例:使用BASIC登陆方法验证用户身份

我使用的Servlet容器是Tomcat,找到它的目录下conf目录中的tomcat-users.xml文件打开内容如下:

<?xml version='1.0' encoding='utf-8'?> <tomcat-users>     <role rolename="myeclipseWeb"/>     <role rolename="myeclipseWebservices"/>     <user username="webservices" password="webservices-pwd" roles="myeclipseWebservices"/>     <user username="admin" password="admin-pwd" roles="myeclipseWeb,myeclipseWebservices"/>     <user username="web" password="web-pwd" roles="myeclipseWeb"/> </tomcat-users>

我使用的IDE是myEclipse9.0,它配置好Tomcat下的tomcat-users.xml文件内容如上,我直接使用它了,你也可以添加自己的角色和用户。该文件定义了2个角色和3个用户,每一个用户都由自己的角色(或者说权限,可以有多重权限)。

创建Web项目,找到web.xml,配置它,使它支持Struts 2并且启动Struts 2的安全策略

<?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_9" version="2.4"           xmlns="http://java.sun.com/xml/ns/j2ee"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">     <display-name>Struts Blank</display-name>     <filter>         <filter-name>struts2</filter-name>         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>     </filter>     <filter-mapping>         <filter-name>struts2</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>     <welcome-file-list>         <welcome-file>index.html</welcome-file>     </welcome-file-list>     <!--  配置应用程序需要保护的资源与什么角色才可以访问它   -->     <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-role>         <role-name>myeclipseWeb</role-name>     </security-role>     <security-role>         <role-name>myeclipseWebservices</role-name>     </security-role>     <!--  设置登录方法  -->     <login-config>         <auth-method>BASIC</auth-method>         <realm-name>User Basic Authentication</realm-name>     </login-config> </web-app>

创建接收一个字段信息的动作类:

public class SecureAction extends ActionSupport {     private static final long serialVersionUID = 1961430702313132722L;     private String username;     public String getUsername() {         return username;     }     public void setUsername(String username) {         this.username = username;     }     @Override     public String execute()     {         return SUCCESS;     } }

创建struts.xml配置文件,声明动作

<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"     "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts>     <package name="securePackage" extends="struts-default">         <action name="secure" class="struts2.action.SecureAction">             <result name="success">/index.jsp</result>         </action>     </package> </struts>

创建输入页面input.jsp和结果页面index.jsp

input.jsp:

<body>     <s:form action="secure">         <s:textfield name="username" label="Enter your name"></s:textfield>         <s:submit value="submit"></s:submit>     </s:form> </body>

index.jsp

<body>     <s:property value="username"/>,Welcome </body>

测试效果,在浏览器输入:http://localhost:8081/SecureTest/input.jsp,得到如下界面:输入"Tom",点击"submit"按钮,查看效果:

如何配置Struts 2应用程序的安全功能

看到了登陆框了吧,此时我们要访问的资源是一个受限资源所以要求权限验证,还记得我们的用户表吧,查看用户表输入用户信息查看结果:

如何配置Struts 2应用程序的安全功能

输入"webservices"与"webservices-pwd"的用户信息:

如何配置Struts 2应用程序的安全功能

提示了一个"403"错误,这是因为虽然用户信息正确,但是"webservices"用户的没有"myeclipseWeb"权限。

这次输入一个不存在的用户信息:

如何配置Struts 2应用程序的安全功能

这次获得了一个"401"错误,这是登陆失败的提示结果,这里会因浏览器的不同而需要不同次数的失败登陆才会得到这个结果。

接下来输入一个正确的用户,并且拥有"webservices"权限的用户信息:

如何配置Struts 2应用程序的安全功能

点击"确定",获得如下结果:

如何配置Struts 2应用程序的安全功能

可以看到,我们成功的访问了受保护的资源。若要传中文字,解决方案我已经在前面"配置Struts2"时介绍过了,需要修改Struts 2默认的编码方式还需要修改页面的编码方式,都改为"GBK"。

看完了这篇文章,相信你对“如何配置Struts 2应用程序的安全功能”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何配置Struts 2应用程序的安全功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何配置Struts 2应用程序的安全功能

小编给大家分享一下如何配置Struts 2应用程序的安全功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!安全性是Web应用程序开发工作中最关键的问题之一。在基于servlet的应用程序里,保护应用程序资源的办法有两种:一
2023-06-17

PHP 函数的安全性如何影响应用程序的性能?

php 安全函数影响应用程序性能,因为它们增加了开销:输入验证需要 cpu 和内存资源。加密要求大量计算。会话管理需要额外的开销。优化建议包括:仅在必要时使用安全函数。尽量减少字符串和数组的处理。使用缓存和第三方库。例如,输入验证可以显著增
PHP 函数的安全性如何影响应用程序的性能?
2024-04-24

如何提高Node.js应用程序的安全性

这篇文章主要介绍“如何提高Node.js应用程序的安全性”,在日常操作中,相信很多人在如何提高Node.js应用程序的安全性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何提高Node.js应用程序的安全性
2023-06-15

PHP 框架安全指南:如何测试 Web 应用程序的安全性?

自动化安全测试包括:使用单元测试框架(如 phpunit)进行单元测试使用集成测试框架(如 laravel 的 dusk)检查组件交互手动安全测试包括:输入验证测试sql 注入测试跨站点脚本 (xss) 测试实战案例展示了如何使用 php
PHP 框架安全指南:如何测试 Web 应用程序的安全性?
2024-05-23

C++ 如何支持移动应用程序的离线功能

在 c++++ 中开发离线应用程序涉及以下步骤:1. 使用 fstream 库持久化数据;2. 使用缓存机制(例如 unordered_map)存储常见数据;3. 使用异步网络请求处理在线操作。这样可以确保应用程序即使在没有互联网连接的情况
C++ 如何支持移动应用程序的离线功能
2024-05-16

如何用ThinkPHP缓存设置提升应用程序的性能

这篇文章主要介绍“如何用ThinkPHP缓存设置提升应用程序的性能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何用ThinkPHP缓存设置提升应用程序的性能”文章能帮助大家解决问题。一、缓存的优
2023-07-06

如何通过PHP8的Sanitize Filters提高应用程序的安全性?

如何通过PHP8的Sanitize Filters提高应用程序的安全性?随着网络应用的普及和用户隐私保护的重要性逐渐增加,开发者们对于应用程序的安全性变得越来越关注。PHP8的引入了Sanitize Filters,使开发人员能够更加方便地
2023-10-22

PHP8如何通过Sanitize Filters来增强应用程序的安全性?

PHP是一门广泛应用于Web开发的脚本语言,而安全性一直是Web应用程序开发者需要关注的重要问题。PHP8提供了一种称为Sanitize Filters的机制,通过对用户输入进行过滤和清理,可以增强应用程序的安全性。本文将详细介绍PHP8中
2023-10-22

Python安装以及配置在实际应用的过程中的强大功能是怎样的

这篇文章给大家介绍Python安装以及配置在实际应用的过程中的强大功能是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python安装 配置作为计算机语言中常用的计算机语言,在实际的应用过程中仍然有人对Pytho
2023-06-17

如何更改win10电脑应用商店程序的安装位置

这篇文章主要为大家展示了“如何更改win10电脑应用商店程序的安装位置”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何更改win10电脑应用商店程序的安装位置”这篇文章吧。华硕电脑更改应用商店
2023-06-27

JavaScript 前端安全威胁:攻击者如何瞄准您的应用程序

JavaScript 前端是 Web 应用程序的必要组成部分,但它也存在许多安全漏洞。攻击者可以利用这些漏洞来窃取数据、执行恶意代码或劫持用户会话。在这篇中,我们将讨论前端安全威胁,攻击者如何瞄准您的应用程序,并提供一些建议来保护您的应用程序免受攻击。
JavaScript 前端安全威胁:攻击者如何瞄准您的应用程序
2024-02-04

Linux服务器容器安全性:如何保护容器中的应用程序

Linux服务器容器安全性:保障容器中应用程序的保护措施容器化应用程序引入的安全挑战,如共享内核、镜像漏洞和特权提升。本文阐述了保护容器中应用程序安全的关键措施:使用安全容器镜像强化容器配置隔离容器管理容器生命周期监控和检测漏洞管理此外,还强调了最佳实践,如DevSecOps、持续安全评估和团队培训。通过实施这些措施,组织可以确保容器环境的安全性和完整性,降低应用程序遭到破坏的风险。
Linux服务器容器安全性:如何保护容器中的应用程序
2024-04-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录