Implement your Own Permission: Pretty Simple Java Code #Root

Implementing Your Own Permission
package com.gamedev.games;

import java.io.*;
import java.security.*;
import java.util.Hashtable;
import com.scoredev.scores.*;

public class ExampleGame
{
public static void main(String args[])
throws Exception
{
HighScore hs = new HighScore(“ExampleGame”);

if (args.length == 0)
usage();

if (args[0].equals(“set”)) {
hs.setHighScore(Integer.parseInt(args[1]));
} else if (args[0].equals(“get”)) {
System.out.println(“score = “+ hs.getHighScore());
} else {
usage();
}
}

public static void usage()
{
System.out.println(“ExampleGame get”);
System.out.println(“ExampleGame set “);
System.exit(1);
}
}

/*
* Copyright (c) 1995, 2008, Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* – Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* – Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* – Neither the name of Oracle or the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS
* IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

package com.scoredev.scores;

import java.io.*;
import java.security.*;
import java.util.Hashtable;

public class HighScore
{
private String gameName;
private File highScoreFile;

public HighScore(String gameName)
{
this.gameName = gameName;

AccessController.doPrivileged(new PrivilegedAction() {
public Object run() {
String path =
System.getProperty(“user.home”) +
File.separator +
“.highscore”;

highScoreFile = new File(path);
return null;
}
});
}

public void setHighScore(final int score)
throws IOException
{
//check permission first
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new HighScorePermission(gameName));
}

// need a doPrivileged block to manipulate the file
try {
AccessController.doPrivileged(new PrivilegedExceptionAction() {
public Object run() throws IOException {
Hashtable scores = null;
// try to open the existing file. Should have a locking
// protocol (could use File.createNewFile).
try {
FileInputStream fis =
new FileInputStream(highScoreFile);
ObjectInputStream ois = new ObjectInputStream(fis);
scores = (Hashtable) ois.readObject();
} catch (Exception e) {
// ignore, try and create new file
}

// if scores is null, create a new hashtable
if (scores == null)
scores = new Hashtable(13);

// update the score and save out the new high score
scores.put(gameName, new Integer(score));
FileOutputStream fos = new FileOutputStream(highScoreFile);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(scores);
oos.close();
return null;
}
});
} catch (PrivilegedActionException pae) {
throw (IOException) pae.getException();
}
}

/**
* get the high score. return -1 if it hasn’t been set.
*
*/
public int getHighScore()
throws IOException, ClassNotFoundException
{
//check permission first
SecurityManager sm = System.getSecurityManager();
if (sm != null) {
sm.checkPermission(new HighScorePermission(gameName));
}

Integer score = null;

// need a doPrivileged block to manipulate the file
try {
score = (Integer) AccessController.doPrivileged(
new PrivilegedExceptionAction() {
public Object run()
throws IOException, ClassNotFoundException
{
Hashtable scores = null;
// try to open the existing file. Should have a locking
// protocol (could use File.createNewFile).
FileInputStream fis =
new FileInputStream(highScoreFile);
ObjectInputStream ois = new ObjectInputStream(fis);
scores = (Hashtable) ois.readObject();

// get the high score out
return scores.get(gameName);
}
});
} catch (PrivilegedActionException pae) {
Exception e = pae.getException();
if (e instanceof IOException)
throw (IOException) e;
else
throw (ClassNotFoundException) e;
}
if (score == null)
return -1;
else
return score.intValue();
}

public static void main(String args[])
throws Exception
{
HighScore hs = new HighScore(args[1]);
if (args[0].equals(“set”)) {
hs.setHighScore(Integer.parseInt(args[2]));
} else {
System.out.println(“score = “+ hs.getHighScore());
}
}
}

From: http://sitestree.com/?p=10884
Categories:Root
Tags:
Post Data:2017-07-20 22:37:31

Shop Online: https://www.ShopForSoul.com/
(Big Data, Cloud, Security, Machine Learning): Courses: http://Training.SitesTree.com
In Bengali: http://Bangla.SaLearningSchool.com
http://SitesTree.com
8112223 Canada Inc./JustEtc: http://JustEtc.net (Software/Web/Mobile/Big-Data/Machine Learning)
Shop Online: https://www.ShopForSoul.com/
Medium: https://medium.com/@SayedAhmedCanada