知识大全 配置Struts 2应用程序的安全功能
Posted 元素
篇首语:人生的旅程就是这样,用大把的时间迷茫 ,在几个瞬间成长。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 配置Struts 2应用程序的安全功能相关的知识,希望对你有一定的参考价值。
配置Struts 2应用程序的安全功能 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
安全性是Web应用程序开发工作中最关键的问题之一 在基于servlet的应用程序里 保护应用程序资源的办法有两种 一是对应用程序进行配置(web xml) 二是使用Java代码硬编码到程序中 前一种方法使用配置文件 该方法很灵活 这是因为通过使用配置文件 无需改写任何代码就可以改变安全策略 是一种常见的手段 而Struts 是基于servlet技术的 所以Struts 的安全策略也可以使用配置文件进行灵活的配置 配置安全策略时 有两个概念需要清楚的区分 用户和角色 简单的说用户为使用计算机的人 可以是个人或组织 角色是一个抽象的概念 泛指职务或者权限 例如 张三 李四 王五三个人 有职员 主管和经理三个职务(权限) 张三是用户 张三可以是主管职务 代表张三这个用户含有主管的权利 不同的servlet容器所提供的用户和角色管理机制是不相同的 我使用的是Tomcat服务器 它提供的用户和角色管理机制文件是在其安装目录下的conf目录中的tomcat users xml文件 可以在这个文件里完成对用户和角色的编辑 例如
- <tomcat users> <role rolename= tomcat /> <role rolename= role /> <user username= tomcat password= tomcat roles= tomcat /> <user username= both password= tomcat roles= tomcat role /> <user username= role password= tomcat roles= role /> </tomcat users>
这个文件定义了 个角色(tomcat和role )和 名用户(tomcat both和role ) 你可以在tomcat users xml文件里定义任意多个用户和角色
使用Struts 保护应用程序的资源
Struts 应用程序的安全策略是通过部署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* 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地址指向的资源将受到保护 该子元素为至少有一个 为必须元素
◆ 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容器就会阻断它 在这里还可以使用 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= encoding= utf ?> <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是myEclipse 它配置好Tomcat下的tomcat users xml文件内容如上 我直接使用它了 你也可以添加自己的角色和用户 该文件定义了 个角色和 个用户 每一个用户都由自己的角色(或者说权限 可以有多重权限)
创建Web项目 找到web xml 配置它 使它支持Struts 并且启动Struts 的安全策略
- <?xml version= encoding= UTF ?> <web app id= WebApp_ version= xmlns= xmlns:xsi= instance xsi:schemaLocation= ; app_ _ xsd > <display name>Struts Blank</display name> <filter> <filter name>struts </filter name> <filter class> apache struts dispatcher ng filter StrutsPrepareAndExecuteFilter</filter class> </filter> <filter mapping> <filter name>struts </filter name> <url pattern>/*</url pattern> </filter mapping> <wele file list> <wele file>l</wele file> </wele 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 = L; 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= encoding= UTF ?> <!DOCTYPE struts PUBLIC //Apache Sofare Foundation//DTD Struts Configuration //EN dtd > <struts> <package name= securePackage extends= struts default > <action name= secure class= struts 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 /> Wele </body>
测试效果 在浏览器输入 得到如下界面 输入 Tom 点击 submit 按钮 查看效果
看到了登陆框了吧 此时我们要访问的资源是一个受限资源所以要求权限验证 还记得我们的用户表吧 查看用户表输入用户信息查看结果
输入 webservices 与 webservices pwd 的用户信息
提示了一个 错误 这是因为虽然用户信息正确 但是 webservices 用户的没有 myeclipseWeb 权限
这次输入一个不存在的用户信息
这次获得了一个 错误 这是登陆失败的提示结果 这里会因浏览器的不同而需要不同次数的失败登陆才会得到这个结果
接下来输入一个正确的用户 并且拥有 webservices 权限的用户信息
点击 确定 获得如下结果
cha138/Article/program/Java/ky/201311/28240
相关参考
Struts中配置文件的详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Struts应用采用
如何在struts中应用国际化呢下面就告诉你方法 要在资源文件配置语言
Struts2配置文件的配置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 配置webxml文件
知识大全 修改Struts2的struts.xml配置文件位置
修改Struts2的struts.xml配置文件位置 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Struts提供了国际化的功能对于一个面向各国的系统来说是非常有帮助的只需要提供每个国家的语言资源包配置后即可使用 下面来用一个登录实例来演示一下Struts的国际化配置和显示 创建一个log
Struts配置与组件介绍 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 有关struts组件配
Struts2教程3:struts.xml常用配置解析 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
初学者入门:Struts中基本配置入门 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一为Str
cha138/Article/program/Java/ky/201404/30504
/_struts分发请求的过程与相关配置 按照mvc模式设计出的web层框架其实就是一个大大的servlet 我们可以在webxml文件中将符合某种特征所有请求交给这个Servlet处理