- 浏览: 1590387 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
编写安全策略 包含(1保护资源,2指定登录方法)
----保护资源
---<web-resource-collection>元素可以包含如下几个子元素-----
---<auth-constraint>元素可以包含的几个子元素-----
---<user-data-constraint>元素可以包含的子元素---
web.xml
然后在 WebRoot\admin\test.jsp
发现访问 http://localhost:8080/Struts2-token/admin/test.jsp 出现 401错误 而 如果不配置安全策略 则可以直接访问 admin/test.jsp
---指定登录方法---
---基表身份验证方法 (BASIC)----
struts.xml
wem.xml 在上面的web.xml中加入下面的配置
然后在 C:\apache-tomcat-6.0.20\apache-tomcat-6.0.20\conf 下的
tomcat-users.xml 加上 role 和 user 的配置
//访问上面的 地址
--http://localhost:8080/Struts2-token/test.action
输入 iteye 10101 就可以看到正式 /admin/test.jsp 的内容了
---Struts2 的安全配置---
--getAuthType()方法---
struts.xml
web.xml 加入下面的配置
--访问
---http://localhost:8383/Struts2-token/authType.action
---isUserInRole()--------
判断已经通过身份验证的用户 所拥有的角色
struts.xml
--getUserPrincipai()方法---
获取登录的用户名
----保护资源
在web应用程序中保护资源 ,需要在web.xml文件中配置<security-constraint>元素,该元素的语法定义如下: <!ELEMENT security-constraint(display-name?,web-resource-collection+,auth-constraint?,user-data-constraint?)> 上述语法定义的含义如下: display-name? :包含的是xml编辑器显示的名称.可选的 ,最多只有一个 web-resource-collection+:可选的 ,一个或多个 auth-constraint?:可选 最多一个 user-data-constraints?: 可选 最多一个
---<web-resource-collection>元素可以包含如下几个子元素-----
<web-resource-name>:用来标识一个资源 (这个必须,下面可选) <discription>:用来对资源进行描述 <url-patter>:用来定义个URL模式,所有与这个URL模式相匹配的URL地址的资源都将受到保护. (可以是 0个 或 多个) <http-method>:用来定义受限制的HTTP请求方法.例如设置其值为POST,则POST 请求方法将受到限制.
---<auth-constraint>元素可以包含的几个子元素-----
<role-name>:用来指定允许访问受保护资源的角色,可以配置多个. (0个或多) <discription>:用啦定义描述信息. (可选)
---<user-data-constraint>元素可以包含的子元素---
description:定义描述信息 transport-guarantee:用来定义数据传输的保护形式. 有如下可选值: integral:表示web应用程序在传输数据时,必须保证数据在传输过程中不被修改. confidential:表示web应用程序在传输数据时,必须对传输的数据加密. none:表示web应用程序在传输数据时,不做任何额外保护.
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <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> <!-- 编写安全策略 --> <security-constraint> <web-resource-collection> <web-resource-name>Admin</web-resource-name> <description>nobody but admin</description> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <!-- 指定可以访问的角色 --> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <!-- 定义安全角色 --> <security-role> <role-name>admin</role-name> </security-role> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
然后在 WebRoot\admin\test.jsp
<body> security-constraint:test.jsp </body>
发现访问 http://localhost:8080/Struts2-token/admin/test.jsp 出现 401错误 而 如果不配置安全策略 则可以直接访问 admin/test.jsp
---指定登录方法---
在上面的示例中,将admin文件夹下面的所有资源都列为保护资源,只允许角色为admin的用户进行访问.那么,如果判断用户角色是否是admin呢?或者说 用户如何让程序知道自己的角色是admin?这时候 我就需要对用户的登录方法进行定义,也就是给出用户证明身份的渠道. 在web中,定义用户的的登录方法,是通过web.xml文件中使用<login-config>元素进行配置的 语法如下: <!ELEMENT login-config (auth-method?,realm-name?,form-login-config?)> <auth-method>:用来指定用户身份验证的方法,可选值有:基本方式(BASIC),基于摘要方式(DIGEST),基于表单方法(FORM),SSl(Secure Socket Layer)方式和基于客户证书方法(CLIENT-CRET). <realm-name>:用来定义一条提示信息.如果使用BASIC身份验证,提示信息建显示在标准的登录对话框中. <form-login-config>:用来指定一个登录页面,以及一个身份验证失败时的错误页面,该元素在<auth-method>元素的FORM是使用才有意义.
---基表身份验证方法 (BASIC)----
struts.xml
<action name="test"> <result name="success">/admin/test.jsp</result> </action>
wem.xml 在上面的web.xml中加入下面的配置
<!-- 使用基本身份验证方法 BASIC --> <!-- 安全策略 --> <security-constraint> <web-resource-collection> <web-resource-name>Admin</web-resource-name> <url-pattern>/test.action</url-pattern> </web-resource-collection> <!-- 指定可以访问的角色 --> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint> <!-- 定义用户的的登录方法 --> <login-config> <!-- 指定用户身份验证的方法 --> <auth-method>BASIC</auth-method> <!-- 用来定义一条提示信息 --> <realm-name>taobao</realm-name> </login-config>
然后在 C:\apache-tomcat-6.0.20\apache-tomcat-6.0.20\conf 下的
tomcat-users.xml 加上 role 和 user 的配置
<tomcat-users> <role rolename="admin"/> <user username="iteye" password="10101" roles="admin"/> </tomcat-users>
//访问上面的 地址
--http://localhost:8080/Struts2-token/test.action
输入 iteye 10101 就可以看到正式 /admin/test.jsp 的内容了
---Struts2 的安全配置---
在Struts2应用中,大多数用户请求都需要经过Action,所以Struts2的安全配置应该针对Action,如果需要限制所有Action访问,只需要在web.xml文件中将.action结尾的所有请求全部配置为受保护资源即可. <url-pattern>*.action</url-pattern> 在web.xml文件中对所有的.action结尾的用户进行身份限制 在Strut2应用中,可以通过Roles拦截器去指定那些角色可以访问指定的Action动作.Roles拦截器有如下几个参数: allowedRoles: 设置允许访问指定Action动作的角色,多个角色之间使用英文状态的逗号(,)隔开. disaledRoles:设置不允许访问指定Action动作的角色,多个角色之间使用英文状态的逗号(,)隔开 <action name="useRoles"> <interceptor-ref name="roles"> <param name="allowedRoles">admin</param> </interceptor-ref> <result name="success">/success.html</result>
--getAuthType()方法---
getAuthType()方法用来返回身份验证方法的名称,该方法有如下几个返回值:BASCI FORM CLIENT_CERT DIGEST 如果用户灭有通过身份验证该方法返回null
package com.sh.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class AuthType extends ActionSupport { @Override public String execute() throws Exception { HttpServletRequest request=ServletActionContext.getRequest(); String methodName=request.getAuthType(); System.out.println(methodName); return SUCCESS; } }
struts.xml
<action name="authType" class="com.sh.action.AuthType"> <result name="success">/success.html</result> </action>
web.xml 加入下面的配置
<security-constraint> <web-resource-collection> <web-resource-name>Admin2</web-resource-name> <url-pattern>*.action</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
--访问
---http://localhost:8383/Struts2-token/authType.action
---isUserInRole()--------
判断已经通过身份验证的用户 所拥有的角色
package com.sh.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UserInRole extends ActionSupport { @Override public String execute() throws Exception { // TODO Auto-generated method stub HttpServletRequest request=ServletActionContext.getRequest(); boolean flag1=request.isUserInRole("admin"); System.out.println("登录用户是否拥有admin角色:"+flag1); return SUCCESS; } }
struts.xml
<action name="userInRole" class="com.sh.action.UserInRole"> <result name="success">/success.html</result></action>
--getUserPrincipai()方法---
获取登录的用户名
package com.sh.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UserPrincipai extends ActionSupport { @Override public String execute() throws Exception { //获取 通过身份验证的用户名 HttpServletRequest request=ServletActionContext.getRequest(); String userName=request.getUserPrincipal().getName(); System.out.println(userName); userName=request.getRemoteUser(); System.out.println(userName); return SUCCESS; } }
<action name="userPrincipai" class="com.sh.action.UserPrincipai"> <result name="success">/success.html</result> </action>
评论
1 楼
rensanning
2012-09-24
这个配置跟struts2没有任何关系。HTTP协议中Basic/Digest Authentication是最基本规范(RFC 2617),无论开发语言或者框架是什么,只要基于HTTP的都可以实现。
http://www.avajava.com/tutorials/lessons/how-do-i-use-basic-authentication-with-tomcat.html
http://www.avajava.com/tutorials/lessons/how-do-i-use-basic-authentication-with-tomcat.html
发表评论
-
解决getOutputStream() has already been called for this response
2014-07-30 19:16 3316java.lang.IllegalStateException ... -
Struts2 + ajaxFileUpload 异步上传文件
2013-12-04 19:33 1888ajaxFileUpload下载地址http://www.ph ... -
Struts2 Action 解析提交的XML
2013-10-16 12:30 1635package com.bjdata.bjsearch.p ... -
MyBatis+Spring+Struts2
2012-11-28 00:32 10613MyBatis3.1.1+Spring3.1.2+Struts ... -
Ibatis 整合spring + Struts2 加入OSCACHE
2012-11-14 00:10 4556说明: 使用 spring2.5 +ibatis2.3 ... -
Struts2中使用JfreeChart
2012-11-06 09:02 16391.jar commons-fileupload-1.2.2. ... -
Struts2整合SiteMesh
2012-11-05 10:33 76551.导入Struts2的jar 和 sitemesh.jar ... -
SSH2整合完整案例(四十三)
2012-09-14 09:34 20687注解配置:Struts2+Spring2.5+Hibernat ... -
Struts2 阻止表单重复 和 等待页面(四十四)
2012-09-23 21:13 2141表单重复提交现象 导 ... -
Struts2 文件上传,下载,删除(四十一)
2012-09-10 23:37 12329本文介绍了: 1.基于表单的文件上传 2.Struts 2 的 ... -
Struts2 文件上传,下载的类型(四十二)
2012-09-06 23:18 1994声明: 以下复制他人的!!! Struts2 文件上传 之 ... -
Struts2 常用标签使用(三十九)
2012-09-03 09:28 64261.append标签 使用append标签可以把多个集合对 ... -
Struts2 timer拦截器(三十二)
2012-08-31 02:17 20691.Strus2系统拦截器中,timer拦截器可以实现输出Ac ... -
Struts2 常用标签使用(三十九)
2012-09-03 00:50 51.append标签 使用append标签可以把多个集合对 ... -
Struts2 主题和模版设置(四十)
2012-09-03 20:24 4142----------------Struts2 主题----- ... -
Struts2 如何使用OGNL表达式(三十八)
2012-08-30 20:55 50781.OGNL是Object Graph Navitagtion ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-30 11:25 18463A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-29 14:08 9A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 iterator 标签遍历 Map,List,数组(三十六)
2012-08-26 18:30 205241.使用iterator 标签 遍历 数组,Map,List ... -
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
2012-08-26 02:52 19175---------------List------------ ...
相关推荐
#### 五、Struts2 实践技巧与优化 **5.1 性能优化** - **减少 Action 调用**:合理设计 Action,避免不必要的多次调用。 - **缓存策略**:利用缓存机制减少数据库查询次数。 **5.2 安全性增强** - **输入验证**:...
Struts2是一个强大的Java web应用程序框架,用于构建MVC(模型-视图-控制器)架构的应用。这个API帮助文档是开发者在使用Struts2框架时的重要参考资料,它详细阐述了框架的各种组件、类库和方法,有助于理解并有效...
2. 配置安全策略:禁用不必要的插件和功能,特别是与OGNL相关的配置。例如,可以禁用`struts2-convention-plugin`和`struts2-ognl-plugin`,或者限制OGNL表达式的执行。 3. 使用过滤器:在Web应用的部署描述符(如...
在"struts2资源下载"中,我们可以获取到与Struts2相关的各种资料,包括但不限于教程、示例代码、API文档、安全补丁以及社区提供的插件等,这些都对学习和使用Struts2框架极其有益。 Struts2的核心功能包括: 1. **...
#### 五、Struts2的常见问题与解决方案 1. **依赖冲突**:在使用Struts2的过程中可能会遇到与其他框架的依赖冲突问题,解决方法通常是调整依赖版本或者排除不必要的依赖。 2. **配置错误**:配置文件的错误是常见的...
3. **安全控制**:Spring Security(原Acegi)可以与Struts2集成,提供用户认证和授权服务,增强应用的安全性。 4. **AOP集成**:Spring AOP可以与Struts2的拦截器一起工作,实现更细粒度的功能,如性能监控、日志...
9. **全局类型转换配置**:为了统一管理不同类型转换的规则,Struts2允许在`struts.xml`配置文件或`xwork-conversion.properties`文件中定义全局的类型转换策略,从而避免在每个Action中重复配置相同的转换规则。...
同时,安全工作不仅仅是检测漏洞,还包括定期更新框架和依赖,以及制定和执行严格的安全策略。 总之,"Struts2漏洞利用工具Devmode版"是网络安全领域的重要工具,它帮助我们识别并解决Struts2框架的潜在风险,提升...
在Struts2框架中,输入校验是确保数据完整性和安全性的重要环节。对于手动输入完成校验,Struts2提供了灵活的机制。 1. **普通处理方式**:在Action类中重写`validate()`方法是最常见的做法。此方法允许开发者...
### Struts1与Struts2的主要区别 #### 1. Action类的设计差异 - **Struts1**: 在Struts1框架中,Action类必须继承自一个抽象类`org.apache.struts.action.Action`。这种方式可能导致的问题是代码灵活性较低,尤其...
2. **配置安全策略**:禁用不必要的插件和功能,特别是那些涉及OGNL表达式的。限制OGNL表达式的行为,例如使用`struts.ognl.allowStaticMethodAccess`配置项。 3. **过滤和验证输入**:对所有用户输入进行严格的...
- **Struts 2**:支持在Action中重写`validate`方法进行校验,也支持整合`XWork`校验框架进行校验,提供了更多的校验策略。 #### 10. Action执行控制的对比 - **Struts 1**:Action的执行顺序依赖于配置文件中的...
9. **异常处理**:讲解如何配置Struts2的全局和Action级别的异常处理器,以及如何自定义异常处理策略。 10. **插件系统**:Struts2有丰富的插件库,如Struts2-dojo-plugin、Struts2-convention-plugin等,书中会...
7. **异常处理**:Struts2提供了一套全面的异常处理机制,可以自定义错误页面和错误处理策略。 8. **安全性**:虽然Struts2在过去的版本中曾出现过安全漏洞,但2.5.12版已经对这些漏洞进行了修复,增强了框架的安全...
Struts2是一个强大的MVC框架,它在Java Web开发中被广泛应用。自定义标签是Struts2的一个重要特性,允许开发者扩展框架的功能,提供更友好的界面元素。在这个基于Struts2的自定义分页标签的实践中,我们将深入探讨...
然而,如同任何复杂软件系统一样,Struts2也存在一些安全缺陷,这些缺陷可能导致严重的安全问题,如SQL注入、跨站脚本(XSS)攻击等。 Struts2的安全问题主要集中在两个方面:框架本身的缺陷和开发者在使用框架时的...
Struts2通过Struts Tags(标签库)简化了JSP页面的编写,如s:form、s:textfield等,可以方便地与Action进行交互。 8. **国际化(i18n)**:Struts2支持多语言环境,可以为不同地区的用户提供本地化的界面和错误消息...
在Struts2中,输入校验是确保数据安全、准确和有效的重要环节。本篇文章将深入探讨Struts2的输入校验机制及其相关知识点。 **输入校验的重要性** 输入校验是Web应用开发中的关键步骤,它可以防止恶意用户提交无效或...
描述中提到的“Struts2漏洞利用工具”,通常是一些安全研究人员或黑客编写的程序,用于检测和利用这些已知漏洞。这些工具可能包括自动化扫描器,可以尝试多种攻击向量,以找出目标系统中的易受攻击点。使用这类工具...