デザイプロジェクトBパート3 演習S1 解答例 | 目次にもどる | 問題にもどる |
問題につかったコードの配置関係
問題1の解答
下記みたいに無かったファイル(dl.txt)が作成されているのを確認できればOKです.C:\dp>dir dl.txt ドライブ C のボリューム ラベルは Windows XP です ボリューム シリアル番号は * です C:\dp のディレクトリ ファイルが見つかりません C:\dp>run all.txt DownloadWrite C:\dp>java -Djava.security.manager -Djava.security.policy==all.txt NetMultiLoader DownloadWrite DownloadWrite <= http://www.cs.shinshu-u.ac.jp/~kaiya/java/tmp/ HttpDownload <= http://kaiya.cs.shinshu-u.ac.jp/tmp/ WriteStrings <= http://cwww.cs.shinshu-u.ac.jp/~kaiya/ C:\dp>dir dl.txt ドライブ C のボリューム ラベルは Windows XP です ボリューム シリアル番号は * です C:\dp のディレクトリ 2005/12/17 19:09 15,174 dl.txt 1 個のファイル * バイト 0 個のディレクトリ * バイトの空き領域 C:\dp>type dl.txt ...
問題2と3の解答
全て禁止ににするポリシー[TXT] だと芸がない[TXT]ので, とりあえず最低限必要なパーミッションに近い ポリシーファイル(下記に同じ)をつくり,// カレントディレクトリのコードは信用する grant codeBase "file:."{ permission java.security.AllPermission "", ""; }; // ロード基の表示 grant { permission java.lang.RuntimePermission "getProtectionDomain"; }; // DownloadWrite.class 自体は信用せよと問題に書いてるから grant codeBase "http://www.cs.shinshu-u.ac.jp/~kaiya/java/tmp/"{ permission java.security.AllPermission "", ""; }; // ネットへクライアントとして接続するコード grant codeBase "http://kaiya.cs.shinshu-u.ac.jp/tmp/"{ permission java.net.SocketPermission "www.cs.shinshu-u.ac.jp", "connect"; }; // ファイル保存のコード grant codeBase "http://cwww.cs.shinshu-u.ac.jp/~kaiya/"{ permission java.io.FilePermission "dl.txt", "write"; };そいつを適当に修正することで,エラー表示を観察してみました.
C:\dp>run exs1n1.txt DownloadWrite C:\dp>java -Djava.security.manager -Djava.security.policy==exs1.txt NetMultiLoader DownloadWrite DownloadWrite <= http://www.cs.shinshu-u.ac.jp/~kaiya/java/tmp/ HttpDownload <= http://kaiya.cs.shinshu-u.ac.jp/tmp/ java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at NetMultiLoader.start(NetMultiLoader.java:51) at NetMultiLoader.main(NetMultiLoader.java:110) Caused by: java.security.AccessControlException: access denied (java.net.SocketPermission www.cs.shinshu-u.ac.jp resolve) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:524) at java.lang.SecurityManager.checkConnect(SecurityManager.java:1023) at java.net.InetAddress.getAllByName0(InetAddress.java:1000) at java.net.InetAddress.getAllByName0(InetAddress.java:981) at java.net.InetAddress.getAllByName(InetAddress.java:975) at java.net.InetAddress.getByName(InetAddress.java:889) at java.net.InetSocketAddress.ファイル関係のコード(WriteStrings.class)のロードを待たずに コケてるのがわかります. しかし,もし,ネット接続のコード部分での例外が try-catchで補足して,画面に出ないようになっていたら, 上記は表示されないでしょう. (ネット接続の有無(意図しないコードの有無)を, ポシリー違反による警告が出るか否かで判定することは一般にできない.)(InetSocketAddress.java:114) at java.net.Socket. (Socket.java:124) at HttpDownload. (HttpDownload.java:12) at DownloadWrite.main(DownloadWrite.java:11) ... 6 more
C:\dp>run exs1f1.txt DownloadWrite C:\dp>java -Djava.security.manager -Djava.security.policy==exs1.txt NetMultiLoader DownloadWrite DownloadWrite <= http://www.cs.shinshu-u.ac.jp/~kaiya/java/tmp/ HttpDownload <= http://kaiya.cs.shinshu-u.ac.jp/tmp/ WriteStrings <= http://cwww.cs.shinshu-u.ac.jp/~kaiya/ java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at NetMultiLoader.start(NetMultiLoader.java:51) at NetMultiLoader.main(NetMultiLoader.java:110) Caused by: java.security.AccessControlException: access denied (java.io.FilePermission dl.txt write) at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269) at java.security.AccessController.checkPermission(AccessController.java:401) at java.lang.SecurityManager.checkPermission(SecurityManager.java:524) at java.lang.SecurityManager.checkWrite(SecurityManager.java:954) at java.io.FileOutputStream.(FileOutputStream.java:169) at java.io.FileOutputStream. (FileOutputStream.java:70) at java.io.FileWriter. (FileWriter.java:46) at WriteStrings. (WriteStrings.java:10) at DownloadWrite.main(DownloadWrite.java:19) ... 6 more
TIPS
目次にもどる | kaiya | $Id: index.html,v 2.1 2005-12-21 09:37:12+09 kaiya Exp kaiya $ |