import javax.swing.JFrame;
public class PermissionTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setSecurityManager(new SecurityManager());
JFrame frame=new PermissionTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class PermissionTestFrame extends JFrame {
private JTextField textField;
private WordCheckTextArea textArea;
private static final int DEFAULT_WIDTH=400;
private static final int DEFAULT_HEIGHT=200;
public PermissionTestFrame()
{
this.setTitle("PermissionTest");
this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
textField=new JTextField(20);
JPanel panel=new JPanel();
panel.add(textField);
JButton openButton=new JButton("Indert");
panel.add(openButton);
openButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
insertWords(textField.getText());
}
});
add(panel,BorderLayout.NORTH);
textArea=new WordCheckTextArea();
add(new JScrollPane(textArea),BorderLayout.CENTER);
}
private void insertWords(String words)
{
try
{
textArea.append(words+"\n");
}catch(SecurityException e)
{
JOptionPane.showMessageDialog(this,"I am sorry,but I cannot do that");
}
}
}
import java.security.Permission;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class WordCheckPermission extends Permission {
private String action;
public WordCheckPermission(String name) {
super(name);
}
public WordCheckPermission(String name,String anAction)
{
super(name);
action=anAction;
}
@Override
public boolean equals(Object other) {
if(other==null)return false;
if(!getClass().equals(other.getClass())) return false;
WordCheckPermission b=(WordCheckPermission) other;
if(!action.equals(b.action)) return false;
if(action.equals("insert"))
return getName().equals(b.getName());
else if(action.equals("avoid"))
return badWordSet().equals(b.badWordSet());
else
return false;
}
@Override
public String getActions() {
return action;
}
@Override
public int hashCode() {
return getName().hashCode()+action.hashCode();
}
@Override
public boolean implies(Permission other) {
if(!(other instanceof WordCheckPermission)) return false;
WordCheckPermission b=(WordCheckPermission) other;
if(action.equals("insert"))
{
return b.action.endsWith("insert")&&getName().indexOf(b.getName())>=0;
}else if(action.equals("avoid"))
{
if(b.action.equals("avoid"))
return b.badWordSet().containsAll(badWordSet());
else if(b.action.equals("insert"))
{
for(String badWord:badWordSet())
if(b.getName().indexOf(badWord)>=0)
return false;
return true;
}else
{
return false;
}
}
else return false;
}
public Set<String> badWordSet()
{
Set<String> set=new HashSet<String>();
set.addAll(Arrays.asList(getName().split(",")));
return set;
}
}
import javax.swing.JTextArea;
public class WordCheckTextArea extends JTextArea {
/* (non-Javadoc)
* @see javax.swing.JTextArea#append(java.lang.String)
*/
@Override
public void append(String str) {
// TODO Auto-generated method stub
WordCheckPermission p=new WordCheckPermission(str,"avoid");
SecurityManager manager=System.getSecurityManager();
if(manager!=null)manager.checkPermission(p);
super.append(str);
}
}
//PermissionTest.policy
grant codeBase "file:d:/test/permission/"
{
//permission java.security.AllPermission;
permission WordCheckPermission "sex,drugs,c++", "avoid";
permission WordCheckPermission "my name is minn", "insert";
};
实现权限类
1)javac *.java
2)java -Djava.security.policy=PerssionTest.policy PermissionTest
public class PermissionTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.setSecurityManager(new SecurityManager());
JFrame frame=new PermissionTestFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
public class PermissionTestFrame extends JFrame {
private JTextField textField;
private WordCheckTextArea textArea;
private static final int DEFAULT_WIDTH=400;
private static final int DEFAULT_HEIGHT=200;
public PermissionTestFrame()
{
this.setTitle("PermissionTest");
this.setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
textField=new JTextField(20);
JPanel panel=new JPanel();
panel.add(textField);
JButton openButton=new JButton("Indert");
panel.add(openButton);
openButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
insertWords(textField.getText());
}
});
add(panel,BorderLayout.NORTH);
textArea=new WordCheckTextArea();
add(new JScrollPane(textArea),BorderLayout.CENTER);
}
private void insertWords(String words)
{
try
{
textArea.append(words+"\n");
}catch(SecurityException e)
{
JOptionPane.showMessageDialog(this,"I am sorry,but I cannot do that");
}
}
}
import java.security.Permission;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class WordCheckPermission extends Permission {
private String action;
public WordCheckPermission(String name) {
super(name);
}
public WordCheckPermission(String name,String anAction)
{
super(name);
action=anAction;
}
@Override
public boolean equals(Object other) {
if(other==null)return false;
if(!getClass().equals(other.getClass())) return false;
WordCheckPermission b=(WordCheckPermission) other;
if(!action.equals(b.action)) return false;
if(action.equals("insert"))
return getName().equals(b.getName());
else if(action.equals("avoid"))
return badWordSet().equals(b.badWordSet());
else
return false;
}
@Override
public String getActions() {
return action;
}
@Override
public int hashCode() {
return getName().hashCode()+action.hashCode();
}
@Override
public boolean implies(Permission other) {
if(!(other instanceof WordCheckPermission)) return false;
WordCheckPermission b=(WordCheckPermission) other;
if(action.equals("insert"))
{
return b.action.endsWith("insert")&&getName().indexOf(b.getName())>=0;
}else if(action.equals("avoid"))
{
if(b.action.equals("avoid"))
return b.badWordSet().containsAll(badWordSet());
else if(b.action.equals("insert"))
{
for(String badWord:badWordSet())
if(b.getName().indexOf(badWord)>=0)
return false;
return true;
}else
{
return false;
}
}
else return false;
}
public Set<String> badWordSet()
{
Set<String> set=new HashSet<String>();
set.addAll(Arrays.asList(getName().split(",")));
return set;
}
}
import javax.swing.JTextArea;
public class WordCheckTextArea extends JTextArea {
/* (non-Javadoc)
* @see javax.swing.JTextArea#append(java.lang.String)
*/
@Override
public void append(String str) {
// TODO Auto-generated method stub
WordCheckPermission p=new WordCheckPermission(str,"avoid");
SecurityManager manager=System.getSecurityManager();
if(manager!=null)manager.checkPermission(p);
super.append(str);
}
}
//PermissionTest.policy
grant codeBase "file:d:/test/permission/"
{
//permission java.security.AllPermission;
permission WordCheckPermission "sex,drugs,c++", "avoid";
permission WordCheckPermission "my name is minn", "insert";
};
实现权限类
1)javac *.java
2)java -Djava.security.policy=PerssionTest.policy PermissionTest