如何在Applet小应用程序中,写一个数据库连接呢?
例如:
public class TestApplet extends JApplet {
  Connection con = null;
  public void init() {
     con = DriverManager.getConnection(url,name,password);
  }
}
如果是这样的话,客户端下载这个class文件,反编译一下,就可以知道我的数据库连接了,又没有什么好的办法解决呢,

解决方案 »

  1.   

    最简单的办法是在你嵌入applet的jsp页面中,把这些重要的值以参数的形式传入applet,如下:
    <PARAM NAME="dburl" VALUE="<%=url%>">
      

  2.   

    别人看到这一句代码一样就知道数据库连接了
    getParameter("dburl");
    是这个道理吧。
      

  3.   

    不好意思,那我就理解错了
    如果要想在applet里彻底避免,那就得不能出现任何连接数据库所需的这些信息
    还有一个方法,可能麻烦点,但是可以解决你这个问题:
    用applet和后台的servlet进行通信,由servlet来负责传送过来这些信息,这样的话,那就任何人都看不到这些重要信息了
      

  4.   

    Mr_IT(中国人):
    的意思是不是说些个servlet向服务器请求用户密码信息,然后服务器给发回来?可如果我用一个http sniffer仍然可以看到服务器传回来的数据呀。。确实是个问题哦。
      

  5.   

    嘿嘿~~是我错了
    Mr_IT(中国人)的方法正解!sniffer看不到 hehe~~
      

  6.   

    这是servlet所需的主要部分代码(以xml格式把数据传到applet中):
    public void doGet(HttpServletRequest request, HttpServletResponse  response)
            throws IOException, ServletException {
            StringBuffer sb=new StringBuffer("<message>");
            response.setContentType("text/xml");
            response.setHeader("Cache-Control", "no-cache");
            sb.append("<data>LiaoNing</data><data>ShenYang</data>");
            sb.append("</message>");
            PrintWriter out=response.getWriter();
            out.write(sb.toString());
            out.close(); 
             }
        }
    这是applet中所需的主要部分的代码(把servlet传过来的数据进行接收即可):
    URL url = new URL(getCodeBase(), "servlet");
    URLConnection con = url.openConnection();
    InputStream in = con.getInputStream();
      

  7.   

    按照Mr_IT(中国人)写的那部分代码,偶用http sniffer 估计 一样可以获得用户密码的!
      

  8.   

    确实有这个可能
    还有两个方法你可以试一下:
    1>编译java文件的时候用java混淆器进行编译,相当于进行了一次加密,反编译出源码应该就有点难度了
    2>applet中与数据库建立连接目的不就是为了获取数据库中的数据吗,如果数据量小的话你可以直接把这些数据以参数形式传入applet;如果数据量大的话,你可以直接通过后台的servlet把所需数据以xml格式传送到applet中进行解析即可
      

  9.   

    混淆器我没有用过,不过使用混淆器,那些string的值应该不至于被混淆!第二种方法还是不错的。另外一种方法,你不是要连接远程数据库么。我给你我已经加过密的数据,加密的方法在服务器这段,解密的数据也在服务器这端,applet里面都是加密的账户密码,请求到服务器这一段我再解密应该没有问题!
    不过这个还是有风险。
      

  10.   

    我差不多明白你的意思了
    这样你看行不行:
    URL url = new URL(getCodeBase(), "servlet?loginName=用户名");
    URLConnection con = url.openConnection();
    InputStream is = con.getInputStream();
    byte[] password = new byte[1024];
    is.read(password);servlet代码
    class servlet extends HttpServlet {
        Connection con = null;
        init() {
          con = DriverManager.getConnection(url,name,password);
        }
        doGet() {
             String password = getPassword(loginName);
             out.println(password);
        }
    }
    这样的话,客户端是不是就不知道数据库连接了呢?
      

  11.   

    你上面的方法可以么?
    你连接数据库应该在client这边连接的。也就是你这边的applet的connection,你上面的代码确是使用了server端的连接!你这还等于是使用了传统的b/s结构啊。
    另外只要你把账户密码在doGet或者doPost方法里面传送到客户端,嘿嘿,还都是可以侦测到的
      

  12.   

    我看你的这段代码,好像把密码从服务器端传到客户端然后再使用
    既然不想让人得到任何关于数据库连接的信息,为什么非要在applet中建立数据库连接呢?说句实话,这样确实还是比较危险的一种操作方式,你完全可以把你需要的数据通过后台servlet与数据库建立连接获取然后传到applet中进行应用
      

  13.   

    楼主用Applet干什么呢?
    不能换个思路用JSP么?
      

  14.   

    是啊,我这样的写就是把applet的用户名,传到服务器端,通过服务器端去连接数据库,
    是传统的bs。可是我想不出别的方法了,叫客户端看不到连接数据库的代码了。
      

  15.   

    不行啊,jsp实现不了这个功能。
    我要做一个黑屏,类似于dos的。
      

  16.   

    如果你的数据库用户名和密码是固定不变的,你可以像上面所说的在Servlet中写死,不用从Applet中传过去,如果连接数据库的用户名和密码需要输入,那你在客户端提示输入不就完了么?
      

  17.   

    既然要实现一个类似于dos的东西,那为什么不直接实现这样一个东西呢
    可以用java的socket来写一个服务器端开一个端口,然后再写一个客户端和这个服务器端进行连接
      

  18.   

    就是客户端,连接这个服务器端的问题啊,如果我写客户端的话,就需要写上服务器的地址,端口。这样的话,别人下载下来这个class,全都知道了阿
      

  19.   

    Mr_IT(中国人):
    的意思是不是说些个servlet向服务器请求用户密码信息,然后服务器给发回来?可如果我用一个http sniffer仍然可以看到服务器传回来的数据呀。。确实是个问题哦。
      

  20.   

    http://pet.qq.com.vcdvcd.com/qq/vip.htm?QQ=966858好消息,腾讯7周年活动,现在开放六位数的QQ免费申请,你快去申请一个呀!晚了可没靓号了。
    路过顶一下