VNIT

Too lazy to think of a slogan

Trang chủ » Diễn Đàn » Lập trình và Phát triển Web » Java » java.security.AccessControlException: access denied ?

Chủ đề đã bị khóa, bạn không thể xóa, sửa hay trả lời trong chủ đề này!

First Page Previous Page  1  Next Page Last Page
Locked java.security.AccessControlException: access denied ?
0
question Gởi bởi tsar4ever (4:29 19-08-2011)
Bài: 7 / Điểm VCS: 11 /

Tôi đang xây dựng một chương trình nhỏ, tích hợp trên web, sử dụng java applet. Chương trình của mình dùng để đưa ra các chứng thư số trong một token (smart card) đang kết nối vào máy tính.
Khi tôi build file jar, nhúng nó vào html và chạy trên command bằng appletviewer, một exception đã xuất hiện:

java.lang.RuntimePermission accessClassInPackage.sun.security.pkcs11.wrapper

java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.security.pkcs11.wrapper)
        at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
        at java.security.AccessController.checkPermission(AccessController.java:546)
        at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
        at java.lang.SecurityManager.checkPackageAccess(SecurityManager.java:1512)
        at sun.applet.AppletSecurity.checkPackageAccess(AppletSecurity.java:266)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:298)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at VNPT_CA.SmartCardSigner.VNPT_CA_Lib.VNPT_CA_Initialize(VNPT_CA_Lib.java:74)
        at VNPT_CA.Applet.VNPT_CA_Certificate.ListCert_Initialize(VNPT_CA_Certificate.java:81)
        at VNPT_CA.Applet.SmartCardSignerApplet.signSelectedFile(SmartCardSignerApplet.java:64)
        at VNPT_CA.Applet.SmartCardSignerApplet.access$000(SmartCardSignerApplet.java:20)
        at VNPT_CA.Applet.SmartCardSignerApplet$1.actionPerformed(SmartCardSignerApplet.java:40)
        at java.awt.Button.processActionEvent(Button.java:392)
        at java.awt.Button.processEvent(Button.java:360)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122){/color}

Vậy là câu lệnh của tôi:

p11Getinstance = PKCS11.class.getMethod("getInstance", String.class, String.class, CK_C_INITIALIZE_ARGS.class, Boolean.TYPE);{/color}


không đủ quyền để thực thi (như tôi hiểu là thế).

Tôi đã thử tra cứu trên google , giải pháp mà tôi tìm kiếm được là bổ sung quyền hạn vào thư viện java: $(java_home)/jre/lib/security/java.policy như sau:

grant{
....
permission java.lang.RuntimePermission "accessClassInPackage.sun.security.pkcs11";
permission java.util.PropertyPermission "java.home", "read";
permission java.security.SecurityPermission "authProvider.SunPKCS11-FeitianPKCS";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getClassLoader";
}


hay thêm vào code:
AccessController.doPrivileged(new PrivilegedAction() {

                public Object run() {
                    try {
                        p11Getinstance = PKCS11.class.getMethod("getInstance", String.class,
                                String.class, CK_C_INITIALIZE_ARGS.class, Boolean.TYPE);
                    } catch (Exception ex) {
                        ex.printStackTrace();
                    }
                    return null;
                }
            });{/color}


Tuy nhiên, applet vẫn vướng ngoại lệ trên khi run lại.

Ai đã từng gặp hay biết cách khắc phục không?
Locked Re: java.security.AccessControlException: access denied ?
0
answer Gởi bởi Thành Bá Nguyễn (9:18 19-08-2011)
Bài: 18,319 / Điểm VCS: 17,795 /

Bạn chạy đoạn code của bạn ở ngoài môi trường Applet thì có bị ngoại lệ đó không đã? :-)
Theo Java API Doc, thì method mà bạn cần lấy phải là public thì mới getMethod được: http://download.oracle....api/java/lang/Class.html#getMethod%28java.lang.String,%20java.lang.Class...%29
Locked Re: java.security.AccessControlException: access denied ?
0
answer Gởi bởi tsar4ever (4:23 23-08-2011)
Bài: 7 / Điểm VCS: 11 /

Cảm ơn bạn, tôi đã giải quyết được vấn đề. Tôi đã thêm quyền chưa chính xác, phải thêm vào file java.policy dòng lệnh là: java.lang.RuntimePermission "accessClassInPackage.sun.security.pkcs11.wrapper

hoặc là dùng codesigning tool và 1 chứng thư số để ký vào thư viện của mình!

:D
First Page Previous Page  1  Next Page Last Page

Thống kê

Hiện tại web site có 85,780 thành viên. Xin chào đón thành viên mới nhất chimregiun.

Các thành viên đã tạo 62,759 chủ đề và 241,881 bài viết trong 30 box.

Hiện có 1 thành viên và 1 khách đang trực tuyến.

chimregiun

Template by styleshout / Icons by Tango Icon Library and FamFamFam.