Acegi

4 respostas
C

Bom dia,

Tenho uma aplicação que usa ACEGI para o usuário logar.

Minha jsp na action tem:

http://localhost:8080/MinhaAplicacao/j_acegi_security_check

e contém os parametros:

j_username
j_password

Contudo, o usuário colocando no form o usuário e senha e clicando em OK, o usuário consegue autenticar normalmente.

O que quero é o seguinte, eu tenho o usuario e senha e gostaria de envia-lo para a action /j_acegi_security_check sem usar a JSP, ou seja, sem clicar no OK.

Alguém tem idéia?

4 Respostas

kinow

Primeira ideia que veio a cabeça foi um POST com HttpClient da Apache.

Mais idéias? :?:

C

kinow:
Primeira ideia que veio a cabeça foi um POST com HttpClient da Apache.

Mais idéias? :?:

Kinow, você tem algum exemplo?

Rodrigo_Carvalho_Aul

Você quer autenticar programaticamente? Nesse link tem um exemplo de como fazer isso: http://www.jroller.com/sjivan/entry/authenticating_programatically_with_acegi

[]'s

Rodrigo Auler

C

Rodrigo Carvalho Auler:
Você quer autenticar programaticamente? Nesse link tem um exemplo de como fazer isso: http://www.jroller.com/sjivan/entry/authenticating_programatically_with_acegi

[]'s

Rodrigo Auler

Desculpe, mas não é isso não.

Eu achei essa classe:

import org.apache.commons.httpclient.*;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.cookie.CookieSpec;
import org.apache.commons.httpclient.methods.*;

/**
 * <p>
 * A example that demonstrates how HttpClient APIs can be used to perform
 * form-based logon.
 * </p>
 *
 * @author Oleg Kalnichevski
 *
 */
public class FormLoginDemo {
    static final String LOGON_SITE = "localhost";
    static final int    LOGON_PORT = 8080;

    public FormLoginDemo() {
        super();
    }

    public static void main(String[] args) throws Exception {

        HttpClient client = new HttpClient();
        client.getHostConfiguration().setHost(
                LOGON_SITE, LOGON_PORT, "http");

        client.getParams().setCookiePolicy(
                CookiePolicy.BROWSER_COMPATIBILITY);

        // 'developer.java.sun.com' has cookie compliance problems
        // Their session cookie's domain attribute is in violation of
        // the RFC2109/ We have to resort to using compatibility
        // cookie policy

        GetMethod authget = new GetMethod("/Teste/j_acegi_security_check");

        client.executeMethod(authget);

        System.out.println("Login form get: " +
                authget.getStatusLine().toString());

        // release any connection resources used by the method
        authget.releaseConnection();

        // See if we got any cookies
        CookieSpec cookiespec = CookiePolicy.getDefaultSpec();
        Cookie[] initcookies = cookiespec.match(
                LOGON_SITE, LOGON_PORT, "/", false,
                client.getState().getCookies());

        System.out.println("Initial set of cookies:");

        if (initcookies.length == 0) {

            System.out.println("None");

        } else {

            for (int i = 0; i < initcookies.length; i++) {
                System.out.println("- " + initcookies[i].toString());
            }

        }

        PostMethod authpost = new PostMethod("/Teste/j_acegi_security_check");

        // Prepare login parameters
        NameValuePair action   = new NameValuePair("action", "Teste");
        NameValuePair url      = new NameValuePair("url", "/j_acegi_security_check");
        NameValuePair userid   = new NameValuePair("j_username", "teste");
        NameValuePair password = new NameValuePair("j_password", "teste");
        authpost.setRequestBody(
                new NameValuePair[] {action, url, userid, password});

        client.executeMethod(authpost);

        System.out.println("Login form post: " +
                authpost.getStatusLine().toString());

        // release any connection resources used by the method
        authpost.releaseConnection();

        // See if we got any cookies
        // The only way of telling whether logon succeeded is
        // by finding a session cookie
        Cookie[] logoncookies = cookiespec.match(
                LOGON_SITE, LOGON_PORT, "/", false,
                client.getState().getCookies());

        System.out.println("Logon cookies:");

        if (logoncookies.length == 0) {

            System.out.println("None");

        } else {

            for (int i = 0; i < logoncookies.length; i++) {
                System.out.println("- " + logoncookies[i].toString());
            }

        }
        
        // Usually a successful form-based login results in a redicrect to
        // another url
        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);

            }
        }
    }
}

E a conexão foi feita com sucesso.

Como faço para redirecionar para a url final, dentro de uma servlet ou action do struts?

:roll:

Criado 14 de novembro de 2008
Ultima resposta 14 de nov. de 2008
Respostas 4
Participantes 3