![](/img/trans.png)
[英]“java.security.AccessControlException: access denied” executing a signed Java Applet
[英]Applet with JDBC - java.security.AccessControlException: access denied
//JDBC using Applet
/*
<applet code = JDBC1 height = 170 width = 350 >
</applet>
*/
import javax.swing.*; //JApplet,JLabel,JButton
import java.applet.*; //Applet
import java.awt.*; //Layout
import java.awt.event.*; //Events
import java.sql.*; //JDBC
public class JDBC1 extends Applet implements Runnable,ActionListener
{
JFrame frame ;
JPanel panel1;
JLabel lblNo,lblName,lblBdate ;
JTextField txtNo,txtName,txtBdate;
JButton btn;
Statement st1;
Connection cn;
ResultSet rs;
public JDBC1()
{
try
{
panel1 = new JPanel ();
panel1.setLayout(new GridLayout(0,2));
lblNo = new JLabel ("Roll No : ");
panel1.add(lblNo);
txtNo = new JTextField(15);
panel1.add(txtNo);
lblName = new JLabel ("Name : ");
panel1.add(lblName);
txtName = new JTextField(15);
panel1.add(txtName);
lblBdate = new JLabel ("Birth Date : ");
panel1.add(lblBdate);
txtBdate = new JTextField(15);
panel1.add(txtBdate); //Add textarea to the panel.
add(panel1); //Add panel to the aaplet.
btn = new JButton ("First");
add(btn); //Add button to the applet.
btn.addActionListener(this);
btn = new JButton ("Next");
add(btn);
btn.addActionListener(this);
btn = new JButton ("Last");
add(btn);
btn.addActionListener(this);
btn = new JButton ("Prev");
add(btn);
btn.addActionListener(this);
btn = new JButton ("Save");
add(btn);
btn.addActionListener(this);
btn = new JButton ("Reset");
add(btn);
btn.addActionListener(this);
btn = new JButton ("Delete");
add(btn);
btn.addActionListener(this);
btn = new JButton ("Update");
add(btn);
btn.addActionListener(this);
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //Load the JDBC-ODBC bridge driver
cn = DriverManager.getConnection("jdbc:odbc:STUDENT_MYDSN"); // conection to databse
st1 = cn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String query = "select * from Student";
rs = st1.executeQuery(query);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void init()
{
try
{
Thread th = new Thread (this);
th.start();
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public void run ()
{
try
{
while(true)
{
JDBC1 my = new JDBC1();
repaint();
Thread.sleep(1000);
}
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public void paint (Graphics g)
{
super.paint(g);
java.util.Date dt = new java.util.Date();
String myDate = dt+"";
g.drawString(myDate,100,150);
}
void getRecord()
{
try
{
txtNo.setText((String) rs.getObject(1));
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
public void actionPerformed(ActionEvent e)
{
try
{
String name = ((JButton) e.getSource()).getText();
if (name == "First")
{
System.out.println("First");
}
if (name == "Prev")
{
System.out.println("Prev");
}
if (name == "Next")
{
System.out.println("Next");
}
if (name == "Last")
{
System.out.println("First");
}
if (name == "Save")
{
System.out.println("First");
}
if (name == "Delete")
{
System.out.println("First");
}
if (name == "Update")
{
System.out.println("First");
}
if (name == "Reset")
{
System.out.println("First");
}
}
catch (Exception ex)
{
System.out.println(ex.toString());
ex.printStackTrace();
}
}
}
通過將此Applet與JDBC結合使用,我將獲得以下錯誤
java.security.AccessControlException: access denied ("java.util.PropertyPermission" "file.encoding"
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:560)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1302)
at java.lang.System.getProperty(System.java:706)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:142)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174)
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:243)
at JDBC1.<init>(JDBC1.java:87)
at JDBC1.run(JDBC1.java:123)
at java.lang.Thread.run(Thread.java:722)
如果不采取措施為小程序賦予適當的權限,您將無法在小程序中運行JDBC。 Oracle的本教程詳細介紹了該主題。
您將無法從(不受信任的)小程序訪問ODBC驅動程序,就像您將無法讀取本地文件系統一樣。
有“純Java” JDBC驅動程序,它們僅需要套接字權限。 如果數據庫服務器可以通過與提供小程序的Web服務器相同的來源(“相同的來源策略”)來使用,那么它將起作用(並且沒有任何網絡干擾)。
但是,將數據庫通過網絡公開給最終用戶可能不是一個好主意。 通常,您會通過Web服務器公開一個安全的界面。 同樣,如果小程序是通過網絡加載的,則您不太可能希望選擇本地配置的數據庫。
(與表達該問題的最小完整程序相比,問題中的代碼看起來很長,但我可能會繼續批評代碼。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.