您的位置:首页 > 编程语言 > Java开发

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对象来帮助他们决定,在把一段代码导入虚拟机时应该给予什么权限。

如果你之前有稍微听过策略这个概念,希望看完本文有给你豁然开朗的感觉
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐