Java/Security/File Read Write
Authenticate and login context
<source lang="java">
import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.security.PrivilegedAction; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; public class AuthenticateNT {
public static void main(String[] args) { try { LoginContext loginContext = new LoginContext("AuthenticateNT"); loginContext.login(); System.out.println("Login Successful"); Subject subject = loginContext.getSubject(); System.out.println(subject); Subject.doAs(subject, new WriteFileAction()); loginContext.logout(); System.exit(0); } catch (LoginException loginException) { loginException.printStackTrace(); System.exit(-1); } }
}
class WriteFileAction implements PrivilegedAction {
public Object run() { try { File file = new File( "D:/", "privilegedFile.txt" ); FileWriter fileWriter = new FileWriter( file ); fileWriter.write( "Welcome to JAAS!" ); fileWriter.close(); } catch ( IOException ioException ) { ioException.printStackTrace(); } return null; }
} /* // java.policy // Policy file that grants AllPermission to JAAS modules and specific permissions to the D:\Projects\Java codebase. grant codebase "file:/D:/jdk1.3.1/jre/lib/ext/jaas.jar" {
permission java.security.AllPermission;
}; grant codebase "file:/D:/JavaProjects/src/-" {
permission javax.security.auth.AuthPermission "createLoginContext"; permission javax.security.auth.AuthPermission "doAs"; permission java.io.FilePermission "D:/privilegedFile.txt", "write"; permission java.io.FilePermission "D:/privilegedFile.txt", "read";
};
- /
/* // jaas.policy // Policy file defining the permissions for the named Principal grant codeBase "file:D:/",
Principal com.sun.security.auth.NTUserPrincipal "santry" { permission java.io.FilePermission "D:/privilegedFile.txt", "write"; permission java.io.FilePermission "D:/privilegedFile.txt", "read";
};
- /
/* // jaas.config // Configures JAAS to use NTLoginModule // for authentication. AuthenticateNT {
com.sun.security.auth.module.NTLoginModule required debug=false;
};
- /
</source>
Checking permissions
<source lang="java">
import java.io.File; public class Permissions {
public static void main(String[] args) { if (args.length != 1) { System.err.println("usage: java Permissions filespec"); return; } File file = new File(args[0]); System.out.println("Checking permissions for " + args[0]); System.out.println(" Execute = " + file.canExecute()); System.out.println(" Read = " + file.canRead()); System.out.println(" Write = " + file.canWrite()); }
}
</source>
Writable, read only file
<source lang="java">
import java.io.File; public class ROW {
public static void main(String[] args) { File filespec = new File("c:\text.txt"); if (filespec.setWritable(false)) System.out.println(filespec + " made read-only"); else System.out.println("Permission denied"); if (filespec.setWritable(true)) System.out.println(filespec + " made writable"); else System.out.println("Permission denied"); System.out.println(filespec + " is currently " + (filespec.canWrite() ? "writable" : "read-only")); }
}
</source>