- 浏览: 1573289 次
- 来自: 上海
文章分类
- 全部博客 (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 3273java.lang.IllegalStateException ... -
Struts2 + ajaxFileUpload 异步上传文件
2013-12-04 19:33 1856ajaxFileUpload下载地址http://www.ph ... -
Struts2 Action 解析提交的XML
2013-10-16 12:30 1594package com.bjdata.bjsearch.p ... -
MyBatis+Spring+Struts2
2012-11-28 00:32 10557MyBatis3.1.1+Spring3.1.2+Struts ... -
Ibatis 整合spring + Struts2 加入OSCACHE
2012-11-14 00:10 4507说明: 使用 spring2.5 +ibatis2.3 ... -
Struts2中使用JfreeChart
2012-11-06 09:02 15911.jar commons-fileupload-1.2.2. ... -
Struts2整合SiteMesh
2012-11-05 10:33 75771.导入Struts2的jar 和 sitemesh.jar ... -
SSH2整合完整案例(四十三)
2012-09-14 09:34 20588注解配置:Struts2+Spring2.5+Hibernat ... -
Struts2 阻止表单重复 和 等待页面(四十四)
2012-09-23 21:13 2104表单重复提交现象 导 ... -
Struts2 文件上传,下载,删除(四十一)
2012-09-10 23:37 12280本文介绍了: 1.基于表单的文件上传 2.Struts 2 的 ... -
Struts2 文件上传,下载的类型(四十二)
2012-09-06 23:18 1953声明: 以下复制他人的!!! Struts2 文件上传 之 ... -
Struts2 常用标签使用(三十九)
2012-09-03 09:28 63781.append标签 使用append标签可以把多个集合对 ... -
Struts2 timer拦截器(三十二)
2012-08-31 02:17 20351.Strus2系统拦截器中,timer拦截器可以实现输出Ac ... -
Struts2 常用标签使用(三十九)
2012-09-03 00:50 51.append标签 使用append标签可以把多个集合对 ... -
Struts2 主题和模版设置(四十)
2012-09-03 20:24 4099----------------Struts2 主题----- ... -
Struts2 如何使用OGNL表达式(三十八)
2012-08-30 20:55 50321.OGNL是Object Graph Navitagtion ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-30 11:25 18409A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 使用Validation框架验证数据(三十七)
2012-08-29 14:08 9A:在Struts2的框架汇中,开发者可以通过继承Action ... -
Struts2 iterator 标签遍历 Map,List,数组(三十六)
2012-08-26 18:30 204751.使用iterator 标签 遍历 数组,Map,List ... -
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
2012-08-26 02:52 19103---------------List------------ ...
相关推荐
14.2 编写安全策略 240 14.2.1 保护资源 240 14.2.2 指定登录方法 241 14.3 身份验证方法 242 14.3.1 使用基本身份验证方法 243 14.3.2 使用基于表单的身份验证方法 245 14.4 隐藏资源 247 14.5 Struts安全...
14.2 编写安全策略 240 14.2.1 保护资源 240 14.2.2 指定登录方法 241 14.3 身份验证方法 242 14.3.1 使用基本身份验证方法 243 14.3.2 使用基于表单的身份验证方法 245 14.4 隐藏资源 247 14.5 Struts安全配置 248 ...
2. 深入 STRUTS架构..................................................................................37 2.1. 随便谈谈......................................................................................
2. 深入STRUTS 架构..................................................................................37 2.1. 随便谈谈.......................................................................................
2.20.2 四舍五入 46 2.20.3 科学记数法 47 2.20.4 java.math.BigDecimal介绍 48 2.20.4.1 BigDecimal的构造方法 48 2.20.4.2 用BigDecimal进行四则运算 49 2.20.4.3 舍入模式 51 2.20.4.3.1 ROUND_CEILING 51 2.20....
5.3.2 声明一个简单的事务策略 5.4 通过方法名声明事务 5.4.1 使用NameMatchTransactionAttributeSource 5.4.2 名称匹配事务的捷径 5.5 用元数据声明事务 5.5.1 用元数据来书写事务属性 ...
十四、RabbitMQ 135.rabbitmq 的使用场景有哪些? 136.rabbitmq 有哪些重要的角色? 137.rabbitmq 有哪些重要的组件? 138.rabbitmq 中 vhost 的作用是什么? 139.rabbitmq 的消息是怎么发送的? 140.rabbitmq 怎么...
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...
其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理Struts和Hibernate。 WebStorage HTML新增的本地存储解决...
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。 HashMap允许将null作为一个entry的key或者...