Security Manager

     Java 1.1 Frame Source      Security Manager Class    File Dialog Class

import java.io.*;
import java.awt.*;
import java.awt.event.*;

class Editor extends Frame implements ActionListener
{
   TextField messages = new TextField();
   TextArea text = new TextArea();
   MenuItem load, save, saas, quit;
   String file, savefile;
   
   Editor()
   {
      super("Editor");
      setLayout(new BorderLayout());
      add ("North", messages);
      messages.setEditable(false);
      add ("Center", text);
      Menu menu = new Menu ("File");
      menu.add (load = new MenuItem("Load ..."));
      menu.add (save = new MenuItem("Save"));
      menu.add (saas = new MenuItem("Save As..."));
      menu.add (quit = new MenuItem("Quit"));
      MenuBar mb = new MenuBar();
      mb.add(menu);
      setMenuBar (mb);
      setSize(600,440);
      show();
      load.addActionListener(this);
      save.addActionListener(this);
      saas.addActionListener(this);      
      quit.addActionListener(this);
      messages.setText("Editing Clean Slate");
   }
   
   public void actionPerformed (ActionEvent e)
   {
      if (e.getSource() == load) loadFile();
      else
      if (e.getSource() == saas) saveFile();
      else
      if (e.getSource() == save) saveIt();
      else
      if (e.getSource() == quit) dispose();
   }
   
   public void loadFile()
   {
      FileDialog fd;
      try
      {
         fd = new FileDialog (this, "Load The File", FileDialog.LOAD);
         fd.show();
         if ((file = fd.getFile()) == null) return;
         savefile = fd.getFile();
      }
      catch (Exception e)
      {
         messages.setText(String.valueOf(e));
         savefile = "abcd";
      }
      try
      {
         FileInputStream fis = new FileInputStream (savefile);
         byte data[] = new byte[fis.available()];
         fis.read(data);
         text.setText(new String(data));
         messages.setText("Editing file "+savefile);
      }
      catch (Exception e)
      {
         messages.setText("Editing new file");
      }
   }
   
   public void saveFile()
   {
      FileDialog fd;
      try
      {
         fd = new FileDialog(this, "Save the File", FileDialog.SAVE);
         fd.show();
         if ((file = fd.getFile()) == null) return;
         savefile = fd.getFile();
      }
      catch (Exception e)
      {
         messages.setText(String.valueOf(e));
         savefile = "abcd";
      }
      try
      {
         FileOutputStream fos = new FileOutputStream (savefile);
         String out = text.getText();
         byte data[] = new byte[out.length()];
         for (int i=0 ; i < out.length() ; i++)
            data[i] = (byte)out.charAt(i);
         fos.write(data);
         messages.setText("Contents saved to "+savefile);
      }
      catch (SecurityException ee)
      {
         messages.setText(String.valueOf(ee));
      }
      catch (Exception e)
      {
         messages.setText("Cannot write to file - read only?");
      }
   }
   
   public void saveIt()
   {
      if (savefile == null)
      {
         messages.setText("No File To SAVE!!!  Use Save As...");
         return;
      }
      try
      {
         FileOutputStream fos = new FileOutputStream (savefile);
         String out = text.getText();
         byte data[] = new byte[out.length()];
         for (int i=0 ; i < out.length() ; i++)
            data[i] = (byte)out.charAt(i);
         fos.write(data);
         messages.setText("Contents saved to "+savefile);
      }
      catch (SecurityException se)
      {
         messages.setText(String.valueOf(se));
         return;
      }
      catch (Exception e)
      {
         messages.setText("Cannot write to file "+savefile+" - read only?");
      }
   }
}

class SmallFrame extends Frame implements ActionListener
{
   Button go;
   TextField messages;
   SmallFrame ()
   {
      add ("Center", go = new Button("Activate Security"));
      add ("South", messages = new TextField());
      go.addActionListener(this);
      setSize(300,120);
      show();
   }

   public void actionPerformed (ActionEvent e)
   {
      try
      {
         if (e.getSource() == go)
            System.setSecurityManager(new MySecurityManager(messages));
      }
      catch (Exception se)
      {
         messages.setText(String.valueOf(se));
      }
   }
}

class MySecurityManager extends SecurityManager
{
   TextField messages;
   
   MySecurityManager (TextField messages)
   {
      this.messages = messages;
   }
   
   public void checkRead (String s)
   {
      messages.setText("Checkread: "+s);
   }
   
   public void checkWrite (String s)
   {
      messages.setText("CheckWrite: "+s);
      throw new SecurityException ("Security violation on "+s);
   }
}

public class SecurityApplet
{
   public static void main (String args[])
   {
      new SmallFrame();
      new Editor();
   }
}