java中对struts中token的使用方法以及jvm学习--策略文件简述
2013-01-24 15:48
666 查看
很多时候要防止重复提交,比如论坛在发表提问的时候,要是不控制那就可以一直提交~
使用方法:论坛为例
ask.do :为跳到提问页面的action
ask.jsp:为提问页面
askok.do:为提问成功提交的action
askok.jsp:处理提问之后的跳转的jsp
首先在ask这个action里面加入saveToken(request);这是为了在提问页面即ask.jsp页面生成一个隐藏 的表单
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="a6b9ff6834284444001b8206723b654d">
在ask。jsp页面做以下处理:使用form为<html:form method="post" action="askok.do"> 因此要引入这个标签 否则不会生成这个隐藏表单。
form写法 1.1之后不写name 没有这个属性 但要在struts-config。xml里面配置这个actionform 我们 可以定义为question 同时要配置askok这个action里面要写入对应的form
<action path="/askok" type="....." name="question">必须写上这个否则会报找不到FORM的 错误
如果要在ask。jsp这个页面做js处理要用到FORM name的话可以直接写 question 因为struts自动 生成了这个form的name 生成之后的:<form name="bangquestion" method="post" action="/askok.do">
ask.jsp 这个页面自动生成加入FORM name
然后在askok.do里面写if (isTokenValid(ac.getRequest(),true)) {
添加提问
}else
{
跳转提示
}
什么是java的策略,什么又是策略文件。
今天我换一下笔记的方式,不是直接讲概念,而是先来做一个小例子,相信你做完这个例子之后再看我对例子的讲解,你对策略,策略文件,会豁然开朗的感觉。
例子很简单,简单的才是大家的,下面跟着我(你完全可以copy我的代码)。
第一步,定义一个简单类。
package com.yfq.test;
import java.io.FileWriter;
import java.io.IOException;
public class TestPolicy {
public static void main(String[] args) {
FileWriter writer;
try {
writer = new FileWriter("d:/testPolicy.txt");
writer.write("hello1");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第二步,定义一个简单的策略文件,我们放到工程的类路径下(src文件夹里),名字为myPolicy.txt
grant codeBase "file:D:/workspace/TestPolicy/bin/*" {
permission java.io.FilePermission "d:/testPolicy.txt", "read";
};
我简单的来说一下这个文件的作用
第一行:grant codeBase "file:D:/workspace/TestPolicy/bin/*"意思是给D:/workspace/TestPolicy/bin/*给这个路径下的所有文件定义权限,星号是统配符,所有的意思
第二行:permission java.io.FilePermission "d:/testPolicy.txt", "read";意思是d:/testPolicy.txt这个文件 只分配读的权限。
第三步,运行,在cmd窗口输入(运行不起来,说明jdk的环境变量没有配置好,去配一下)
java -classpath D:/workspace/TestPolicy/bin -Djava.security.manager -Djava.security.policy=D:/workspace/TestPolicy/src/myPolicy.txt com.yfq.test.TestPolicy
这句话的意思,把当前的类路径指定为D:/workspace/TestPolicy/bin,启动默认的安全管理器(这里你应该也猜到了,策略必须和安全管理器一起合作才能起作用),设置安全策略文件的位置(关于策略文件的安装是有多种方式的,这里我们是在windows下,如果你有兴趣可以自己再多摸索)。
第四步,查看输出
这里报出了异常,提示本应用对d:/testPolicy.txt这个文件没有写的权限。
修改一下上面的myPolicy.txt文件,如下
grant codeBase "file:D:/workspace/TestPolicy/bin/*" {
permission java.io.FilePermission "d:/testPolicy.txt", "read,write";
};
再次运行,没有报错了。
好了实验成功,或许你会疑问,这个有鸟用啊,不要急,在下一节中,我们会详细的讲,现在我做一下简单的介绍,这个策略文件(本文中为myPolicy.txt)在java中对应着一个类,叫java.security.Policy(策略),这是一个神奇的类,有了它,你可以定义自己代码的权限,当然它还可以结合我们笔记四讲到的安全管理器。而你现在只需要记住一句话:
java对应用程序的访问控制策略是由抽象类java.security.Policy的一个子类的单例所表示,任何时候,每个应用程序实际上只有一个Policy对象,Policy对象对应着策略文件。类装载器利用这个Policy对象来帮助他们决定,在把一段代码导入虚拟机时应该给予什么权限。
如果你之前有稍微听过策略这个概念,希望看完本文有给你豁然开朗的感觉
使用方法:论坛为例
ask.do :为跳到提问页面的action
ask.jsp:为提问页面
askok.do:为提问成功提交的action
askok.jsp:处理提问之后的跳转的jsp
首先在ask这个action里面加入saveToken(request);这是为了在提问页面即ask.jsp页面生成一个隐藏 的表单
<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="a6b9ff6834284444001b8206723b654d">
在ask。jsp页面做以下处理:使用form为<html:form method="post" action="askok.do"> 因此要引入这个标签 否则不会生成这个隐藏表单。
form写法 1.1之后不写name 没有这个属性 但要在struts-config。xml里面配置这个actionform 我们 可以定义为question 同时要配置askok这个action里面要写入对应的form
<action path="/askok" type="....." name="question">必须写上这个否则会报找不到FORM的 错误
如果要在ask。jsp这个页面做js处理要用到FORM name的话可以直接写 question 因为struts自动 生成了这个form的name 生成之后的:<form name="bangquestion" method="post" action="/askok.do">
ask.jsp 这个页面自动生成加入FORM name
然后在askok.do里面写if (isTokenValid(ac.getRequest(),true)) {
添加提问
}else
{
跳转提示
}
什么是java的策略,什么又是策略文件。
今天我换一下笔记的方式,不是直接讲概念,而是先来做一个小例子,相信你做完这个例子之后再看我对例子的讲解,你对策略,策略文件,会豁然开朗的感觉。
例子很简单,简单的才是大家的,下面跟着我(你完全可以copy我的代码)。
第一步,定义一个简单类。
package com.yfq.test;
import java.io.FileWriter;
import java.io.IOException;
public class TestPolicy {
public static void main(String[] args) {
FileWriter writer;
try {
writer = new FileWriter("d:/testPolicy.txt");
writer.write("hello1");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
第二步,定义一个简单的策略文件,我们放到工程的类路径下(src文件夹里),名字为myPolicy.txt
grant codeBase "file:D:/workspace/TestPolicy/bin/*" {
permission java.io.FilePermission "d:/testPolicy.txt", "read";
};
我简单的来说一下这个文件的作用
第一行:grant codeBase "file:D:/workspace/TestPolicy/bin/*"意思是给D:/workspace/TestPolicy/bin/*给这个路径下的所有文件定义权限,星号是统配符,所有的意思
第二行:permission java.io.FilePermission "d:/testPolicy.txt", "read";意思是d:/testPolicy.txt这个文件 只分配读的权限。
第三步,运行,在cmd窗口输入(运行不起来,说明jdk的环境变量没有配置好,去配一下)
java -classpath D:/workspace/TestPolicy/bin -Djava.security.manager -Djava.security.policy=D:/workspace/TestPolicy/src/myPolicy.txt com.yfq.test.TestPolicy
这句话的意思,把当前的类路径指定为D:/workspace/TestPolicy/bin,启动默认的安全管理器(这里你应该也猜到了,策略必须和安全管理器一起合作才能起作用),设置安全策略文件的位置(关于策略文件的安装是有多种方式的,这里我们是在windows下,如果你有兴趣可以自己再多摸索)。
第四步,查看输出
这里报出了异常,提示本应用对d:/testPolicy.txt这个文件没有写的权限。
修改一下上面的myPolicy.txt文件,如下
grant codeBase "file:D:/workspace/TestPolicy/bin/*" {
permission java.io.FilePermission "d:/testPolicy.txt", "read,write";
};
再次运行,没有报错了。
好了实验成功,或许你会疑问,这个有鸟用啊,不要急,在下一节中,我们会详细的讲,现在我做一下简单的介绍,这个策略文件(本文中为myPolicy.txt)在java中对应着一个类,叫java.security.Policy(策略),这是一个神奇的类,有了它,你可以定义自己代码的权限,当然它还可以结合我们笔记四讲到的安全管理器。而你现在只需要记住一句话:
java对应用程序的访问控制策略是由抽象类java.security.Policy的一个子类的单例所表示,任何时候,每个应用程序实际上只有一个Policy对象,Policy对象对应着策略文件。类装载器利用这个Policy对象来帮助他们决定,在把一段代码导入虚拟机时应该给予什么权限。
如果你之前有稍微听过策略这个概念,希望看完本文有给你豁然开朗的感觉
相关文章推荐
- JAVA基础学习之流的简述及演示案例、用缓冲区方法buffer读写文件、File类对象的使用、Serializable标记接口(6)
- java 学习之三 Formatter的使用,以及文件扩展名的归类
- java之jvm学习笔记九(策略文件)
- 非java.util.zip,使用ant.jar制作zip压缩文件,以及相关中文解决方法
- java之jvm学习笔记九(策略文件)
- JVM的方法区以及JVM运行java文件的过程
- [Java Eclipse] 使用Eclipse发布jar包以及制作exe文件的方法
- JAVA学习提高之----使用J2SE API读properties文件的六种方法
- 在AIX上用IBM的JVM,内存溢出时默认地会产生javacore文件(关于cpu的)和heapdump文件(关于内存的)。手动产生堆栈文件的方法是使用kill -3
- JAVA获取JVM内存使用以及服务器CPU,硬盘使用方法
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- java学习笔记:使用zip api进行文件解压缩以及不解压直接读取指定文件内容
- SSH与SSM学习之Struts203——主配置文件配置_常量配置_动态方法配置_action书写方式
- 有关于java文件的相关方法的使用的理解。
- Hibernate 实体类 映射文件使用注解方式 经典报错以及解决方法
- struts2.X心得9--struts2自定义拦截器以及文件上传等几个拦截器使用案例
- JAVA基础 day22 File类的方法和应用 利用递归获取目录下的所有文件 Properties类的应用(和IO技术结合,存取配置文件) 打印流和合并流等功能类的学习应用 切割文件练习
- 黑马程序员-JAVA学习之反射以及Class类的常用方法
- java学习笔记---Java中批处理SQL的使用方法(JDBC)