Hi to all,
I'm looking for a solution to my problem. First of all I have to program a Java 
client based on Apache HTTPClient. The user must feed his username and password 
as parameter in this application. The CAS server should authenticate the user. 
The client does two requests to CAS server. For the first GET request to 
".../cas/login" get the client as response a normal login page. From this 
response I can extract a login ticket and construct a second POST request with 
tree parameters: username, password and lt. For this POST request I should get 
a response about my successful or not authentication. But the problem is I get 
the same login page back. I've installed the CAS server in the Tomcat. I don't 
know what can I do else? Can somebody help me with my problem? Maybe I should 
make some changes in CAS settings? Here is the source code that I've used: 

static String service = "www.google.de";
    static String LOGON_SITE = "localhost";
    static int    LOGON_PORT = 8080;
    
    public static void StartHTTPClient()
    {
      try{
                  HttpClient client = new HttpClient();
                client.getHostConfiguration().setHost(LOGON_SITE, LOGON_PORT, 
"http");
                
client.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
                
client.getParams().setParameter("http.protocol.content-charset", "UTF-8");
                GetMethod authget = new GetMethod("/cas/login");
                NameValuePair serv = new NameValuePair("service",service);
                client.executeMethod(authget);
                System.out.println("Login form get: " + 
authget.getStatusLine().toString());
                String response=authget.getResponseBodyAsString();
                System.out.println("Server response:\n" + response.trim());
                int c1=response.indexOf("name=\"lt\"", 0);
                System.out.println(c1);
                String lt=response.substring(c1+17, c1+93);
                System.out.println(lt);
                int c2=response.indexOf("method=\"post\" action=\"", 0);
                System.out.println(c2);
                String path=response.substring(c2+27, c2+85+service.length());
                System.out.println(path);
                // release any connection resources used by the method
                authget.releaseConnection();
                
                PostMethod authpost = new PostMethod("/cas/login");
                // Prepare login parameters
                NameValuePair ltP      = new NameValuePair("lt", lt);
                NameValuePair userid   = new NameValuePair("username", 
URLEncoder.encode("aaaa", "UTF-8"));
                NameValuePair password = new NameValuePair("password", 
URLEncoder.encode("aaaa", "UTF-8"));
                authpost.setRequestBody(new NameValuePair[] {ltP, userid, 
password});
                
                //authpost.setDoAuthentication(true);
                client.executeMethod(authpost);
                System.out.println("Login form post: " + 
authpost.getStatusLine().toString()); 
                // release any connection resources used by the method
                System.out.println(authpost.getResponseBodyAsString());
                authpost.releaseConnection();
            
                int statuscode = authpost.getStatusCode();
                if ((statuscode == HttpStatus.SC_MOVED_TEMPORARILY) ||
                    (statuscode == HttpStatus.SC_MOVED_PERMANENTLY) ||
                    (statuscode == HttpStatus.SC_SEE_OTHER) ||
                    (statuscode == HttpStatus.SC_TEMPORARY_REDIRECT)) {
                    Header header = authpost.getResponseHeader("location");
                    if (header != null) {
                        String newuri = header.getValue();
                        if ((newuri == null) || (newuri.equals(""))) {
                            newuri = "/";
                        }
                        System.out.println("Redirect target: " + newuri); 
                        GetMethod redirect = new GetMethod(newuri);
            
                        client.executeMethod(redirect);
                        System.out.println("Redirect: " + 
redirect.getStatusLine().toString()); 
                        // release any connection resources used by the method
                        redirect.releaseConnection();
                    } else {
                        System.out.println("Invalid redirect");
                        System.exit(1);
                    }
                }
      }
      catch(Exception exc)
      {
            System.out.println(exc.toString());
      }
    }

Thanks.

Regards Sven
_______________________________________________
Yale CAS mailing list
[email protected]
http://tp.its.yale.edu/mailman/listinfo/cas

Reply via email to