话说,有个系统网站a的登录页面,仅仅知道该页面的地址。现在要在自己的系统网页b上写一个连接,这个连接可以打开上面网站A并且完成登录。
然后这个网页B上的链接,指向一个java
然后就写这么个java程序,如何完成这个操作呢?我写了点
index上就一个连接,连接指向servlet/check.java,check就把账户名密码传到login.jsplogin.jsp
 <script>   
  function   login()   
  {   
  form.submit();   
  }   
  </script>   
  <body   onload=login()>   
  <form   method=post   name=form   action="http://passport.renren.com/PLogin.do">   
  <input   type=hidden   value="${requestScope.email}"   name = "email">   
  <input   type=hidden   value="${requestScope.password}"   name = "password">      
  </form>check.java
这个里面先直接写死个用户名跟密码,传递到login.jsp做实验
但是,如果不要写login.jsp这个页面的话?这个功能要怎么实现?

解决方案 »

  1.   

    系统网站a的登录页面,知道该页面的地址
    反正如何在网站B上点一个连接,就能打开并登陆网站A
    还有其他什么样的思路,求教~~~~~~~~~
    上google,baidu,感觉有点像单点登录,但也没那么复杂
    因为在check.java里可以写入用户名跟密码,这里如何获得用户名密码暂不考虑
    直接写死个,试验无任何保护装备万米高空裸身自由裸体不忘叩首,拜求!
      

  2.   

    <a href="登录请求的url?method=登录验证方法名&userName=你的id&password=你的密码" target="main">网站B点这登录A网站</a>
      

  3.   

    我的思路是:
    点击链接并传递参数->登陆页用js获得参数->判断如果参数存在则调用action方法并传递用户名密码
      

  4.   

    cookie , session, application都行啊
     不要用户名登录, 呵呵 
      那只能在地址栏里面传递参数了啊
      

  5.   

    如果在java里写,用浏览器打开一个url,并传递参数,要怎么写?
    这个真不懂
      

  6.   

    就是拼成url,是不是很容易被防盗链,而无法登陆?
    如果用cookies能不能通过防盗链呢,能不能伪造cookies呢?
    cookies不大懂,具体怎么样的呢?
      

  7.   

    你都能知道对方密码了 还要自己写个自动登陆?
    难道是获得多个用户名 密码 然后循环登陆?
    知道对方登陆Action AND method否?
    知道对方传参个数及登陆标志否?
    知道对方传递参数内容否?
      

  8.   

    /**
     * 确定机构 进业务时选择机构
     */
    public ActionForward confirmOrg(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
    try {
    List orgList = getPermittedOrg(getUser(request).getUserId(),
    TRADENO);
    if (orgList == null && orgList.size() < 0) {
    ActionMessages messages = new ActionMessages();
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
    "error.org.noPrivilege"));
    saveMessages(request, messages);
    return mapping.findForward("error");
    }
    request.setAttribute("orgs", orgList);
    } catch (Exception e) {
    ActionMessages messages = new ActionMessages();
    messages.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(
    "error.str", e.getMessage()));
    saveMessages(request, messages);
    log.error(e);
    return mapping.findForward("error");
    }
    return mapping.findForward("confirmOrg");
    }
    象这个你怎么进??
    先要从数据库获得用户所属机构、ID、权限。放到orgList 在返回页面更何况 连orgList参数构成都不知道是哪些
    什么都不知道怎么进去嘛?
      

  9.   

    有用户名跟密码的,这个只是为了免去输入用户名跟密码
    没有做循环这个
    要登录的网站是别人做的,还没见过,
    意思是,只给你一个登陆页面的地址的情况下,如何完成自动登录。(上网搜过,感觉有点像单点登录,但是情况又不一样,因为要登录的网站不会给你做任何的修改)
    另外如果有了这个登录地址后,要用httpwatch的话看哪些部分,获得您说的那些东西?
    另外9楼的问题,还恳请各位大大赐教
      

  10.   

    我有一些菜菜的想法,不知道能不能实现,像大神们请教下。利用httpclient登录成功后,返回的HTML代码直接打开,或者是从中获取cookies(不知道能不能获取到),然后打开登录页面(该页面也必须能验证cookies)。
    不过对于httpcliet还不熟,如果对方网站防盗链,直接拒绝外部的请求的话,这个好像也不行。
    另外要是写个自动填表的控件,这个对我而言好难,要考虑不同分辨率,捕捉输入框的位置。
      

  11.   

    cookies session 等吧,URL加上参数等
      

  12.   


    url早做过了
    劳驾再看看我的回复,有什么样的具体方法没?
      

  13.   

    这个问题我也有兴趣,再帮你顶上去……&呵呵
      

  14.   

    目标网站登录框提交的地址是http://www.test.com/login.jsp
    账号abc  密码123
    登陆框user属性username  pwd属性password
    你自己的页面上提供一个url http://www.test.com/login.jsp?username=abc&&password=123,点击就提交这个地址了,就能登录目标网站登陆后的页面了,不知道你要的是不是这个效果。
      

  15.   

    HttpClient能解决这个我问题,我试过了,不过我把他放到web上是出了点问题,tomcat不能找到这个项目的jar,不过我确实导入了,如果你知道怎么解决这个问题麻烦告诉我啊,HttpClient一定行,我觉得还是我的问题,jar不能被识别。问一下,eclipse构建路径是用的一个路径,怎么才能让他切实把jar放到lib文件夹下啊?
      

  16.   

    直接用java api 里的URL类
      

  17.   

    再问,
    如果用httpclient的POST返回的信息,直接打开Header获取的头信息,做url登录呢?
    有什么问题么?
      

  18.   

    session怎么实现自动登录啊??不行吧 。。浏览器一关,session就完啦
    只有cookie吧?
      

  19.   

    我的思路是:
    在你的网站上,把username和password放到浏览器的cookies上;//怎么放?请高手回答清楚!!
    链接这样写:某网站?usename=xx&password=xx;
    这个xx这样,用javascript获得cookies,从而获得username和password.//这行是我猜的,我也不会javascript。还是请高手答!!!
    等高手回答,帮你顶。\(^o^)/~
      

  20.   

    OK
    需求大家都看懂了吧,就是免去输入用户名密码,自动完成登录
    一、我开贴中的思路,就是仿造表单提交验证,这个可以实现,但是据说这种方法有问题,所以我想求教其他方法。
    该方法的原理,代码如下
    <html>
    <head>
    <script language="javascript">
    function onload(){
       document.forms[0].userName.value="test";
       document.forms[0].password.value="123456";
       document.forms[0].submit();
    }
    </script>
    </head>
    <body onload="javascript:onload()">
    <form action="xxxxxx">
    <input type="text" name="userName" value="">
    <input type="text" name="password" value="">
    </body>
    </html>
    二、后来,我就想用httpclient,不过,我利用httpclient,也只能在后台登录到网站,获取一些数据之类的。(获取cookie这块代码还没大搞懂,因为想打印出来都没东西)
    然后关键问题,我不仅要自动登录这个网站,还要在客户端的浏览器中打开网站页面(必须是登录过的)
      

  21.   


    还要在客户端的浏览器中打开网站页面(必须是登录过的)
    补充下,写个web程序,应该说是  浏览器端 吧?
      

  22.   

    Cookie的办法是行不通的。你可以通过你自己的网站把用户名和密码保存在客户端,可是没法让你要链接到的网站去自动读取Cookie啊。
      

  23.   

    我有个想法 不知道行不行的通 暂时我对Cookies了解的太少了
    首先 自己在目标网站随便注册一个账户 让其将Cookies保存到本地
    然后用request对象getCookies 获值
    模拟拼接出连接
    <html>
    <head>
    <script language="javascript">
    function onload(){
       document.forms[0].userName.value="test";
       document.forms[0].password.value="123456";
       window.open("这里直接拼接网站地址+用户名+密码+其他参数");
    }
    </script>
    </head>
    <body onload="javascript:onload()">
    <form action="xxxxxx">
    <input type="text" name="userName" value="">
    <input type="text" name="password" value="">
    </body>
    </html>
      

  24.   


    这个都模拟表单提交了action了,怎么还去打开拼装的url
      

  25.   

    你是说把账户、密码、参数什么的都放到Action里面去?然后呢?从action跳转到他们的页面?
      

  26.   

    你的意思难道不是这样么?
    window.open("这里直接拼接网站地址+用户名+密码+其他参数");
    这个跟action提交表单不就是一样的么?
      

  27.   

    需求:B网站有一个链接aa可以直接跳到A网站,并且自动完成用户登录aa的href属性可以这样拼写:/A/**.do?method=autoLogin&userId=(session拿)&randomNum=(随机码)&code(防伪编码)参数的userId可以从当前B网站的session中用户信息里获取
    randomNum可以随便生成一个几位的随机码
    code可以自己写一个方法(自己定义,保证A-B网站都有这个方法)
    通过传递userId,randomNum两个参数按一定规则生成code然后链接跳到的是A网站的一个接受自动登录处理的Action,
    拿到userId和randomNum,同样调用上边说的自定义方法,验证code是否一致。
    如果一致,在A网站中再根据userId,查到用户信息,把信息放到A网站的session中
      

  28.   

    HttpSession session = request.getSession(); 
    session.setAttribute(user, user); 
    session.setMaxInactiveInterval(2 * 3600); // Session保存两小时 
    Cookie cookie = new Cookie("JSESSIONID", session.getId()); 
    cookie.setMaxAge(2 * 3600); // 客户端的JSESSIONID也保存两小时 
    session.setMaxInactiveInterval(interval) 
    cookie.setPath("/"); 
    response.addCookie(cookie); 
    如果使用上面的代码,即使浏览器关闭,在两小时之内,Web程序仍然可以自动登录。
      

  29.   

    对于楼主的思路:一、一般就是仿造表单提交验证,用到session的,先httpclient连登录页面获取jsessionid,假设为XXX,然后<form action = 原来地址+"?JSESSIONID=XXX">,按照原来提交就可以了
    二、全程httpclient,既然楼主已经实现了后台登录和获取数据,直接将获取到的数据返回给前台不就可以了吗?相当于代理关于获取cookie,我只写过httpurlconnection,httpclient应该也差不多.String url =  request.getParameter("url");
    java.io.InputStream l_urlStream; 
    java.net.URL l_url = new java.net.URL(url); 
    java.net.HttpURLConnection l_connection = (java.net.HttpURLConnection) l_url.openConnection();
    l_connection.connect(); 
    /*l_urlStream = l_connection.getInputStream(); 
    java.io.BufferedReader l_reader = new java.io.BufferedReader(new java.io.InputStreamReader(l_urlStream));
    String sCurrentLine=null;
    while ((sCurrentLine = l_reader.readLine()) != null) 
    {
    System.out.println(sCurrentLine);

    }*/注释掉的是返回的页面信息
    for (int i=0; ; i++) { 
    String headerName = l_connection.getHeaderFieldKey(i); 
    String headerValue = l_connection.getHeaderField(i);
    if("Set-Cookie".equals(headerName)) {
                            //这里就是了cookie
                            System.out.println(headValue);
    break;
    }
    if (headerName == null && headerValue == null) { break; } 
    }