Fóruns

Início » Liferay Portal » Español » 3. Desarrollo

Visualização combinada Visão plana Exibição em árvore
Tópicos [ Anterior | Próximo ]
toggle
Roberto Fernandez Montero
Redireccionar despues de login
28 de Janeiro de 2013 00:52
Resposta

Roberto Fernandez Montero

Ranking: New Member

Mensagens: 21

Data de entrada: 12 de Dezembro de 2012

Mensagens recentes

Buenas, estoy intentando generar redirecciones dinamicas despues del Login, lo hago de la siguiente forma, en funcion del tipo de usuario que sea:


 1
 2public class AccionLogin extends Action {
 3
 4     @Override
 5     public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException {
 6    try {
 7         doRun(request, response);
 8    } catch (Exception e) {
 9         throw new ActionException(e);
10    }
11     }
12     protected void doRun(HttpServletRequest request, HttpServletResponse response) throws Exception {
13
14    HttpSession sesion = request.getSession();
15    User usuarioLogin = PortalUtil.getUser(request);
16
17    // Recupero la lista de roles
18    ArrayList<Role> roles = UtilRoles.getIntExtRol();
19
20
21// Compruebo si el usuario pertenece al grupo
22    if (UtilLdap.esGrupo(request, usuarioLogin.getScreenName())) {
23         Constantes._log.info("El usuario es Interno en el Ldap vector. Gestiono su rol");
24         UtilRoles.setRoleIfNotHave(usuarioLogin, roles, Constantes.INTERNOS);
25         sesion.setAttribute(WebKeys.LAST_PATH, UtilUrls.generaLasthPath(request, Constantes.INTERNOS));
26         response.sendRedirect(UtilUrls.generaRedireccion(request, Constantes.INTERNOS));
27
28
29    } else {
30         Constantes._log.info("El usuario es externo en el Ldap vector. Gestiono su rol");
31         UtilRoles.setRoleIfNotHave(usuarioLogin, roles, Constantes.EXTERNOS);
32        // sesion.setAttribute(WebKeys.LAST_PATH, UtilUrls.generaLasthPath(request, Constantes.EXTERNOS));
33         response.sendRedirect(UtilUrls.generaRedireccion(request, Constantes.EXTERNOS));
34    }
35     }
36}


Como veis, he probado a traves de last_path y de redirect, en ambos casos me falla,genero un problema de cookies y redireccionamiento infinito.
El generaLasthPath y redireccion unicamente me lleva a

www.portal.com/liferay-portal/group/intranet/internos
O
www.portal.com/liferay-portal/group/intranet/externos

Yo paso el /grooup/...

Alguien tiene alguna sugerencia?
Gracias.
Sergio González
RE: Redireccionar despues de login
4 de Março de 2013 02:30
Resposta

Sergio González

LIFERAY STAFF

Ranking: Expert

Mensagens: 274

Data de entrada: 7 de Janeiro de 2010

Mensagens recentes

Buenas Roberto,

No sé si ya lo habrás mirado, pero Liferay ofrece por defecto una clase que es muy parecido a lo que tú quieres hacer, salvo que el comportamiento es para todos los usuarios el mismo (mientras que el tuyo depende del usuario).

La clase es DefaultLandingPageAction.java en portal-impl/src/com/liferay/portal/events.

La lógica que tiene es:

 1
 2    protected void doRun(
 3            HttpServletRequest request, HttpServletResponse response)
 4        throws Exception {
 5
 6        long companyId = PortalUtil.getCompanyId(request);
 7
 8        String path = PrefsPropsUtil.getString(
 9            companyId, PropsKeys.DEFAULT_LANDING_PAGE_PATH);
10
11        if (_log.isInfoEnabled()) {
12            _log.info(
13                PropsKeys.DEFAULT_LANDING_PAGE_PATH + StringPool.EQUAL + path);
14        }
15
16        if (Validator.isNotNull(path)) {
17            LastPath lastPath = new LastPath(StringPool.BLANK, path);
18
19            HttpSession session = request.getSession();
20
21            session.setAttribute(WebKeys.LAST_PATH, lastPath);
22        }


Como ves, no hace ningún redirect, simplemente setea en la request el atributo WebKeys.LAST_PATH con el objeto LastPath que se genera en función de lo que se define en esta propiedad del portal.properties:

##
## Default Landing Page
##

#
# Set the default landing page path for logged in users relative to the
# server path. This is the page users are automatically redirected to after
# logging in. For example, if you want the default landing page to be
# http://localhost:8080/web/guest/login, set this to /web/guest/login. To
# activate this feature, set auth.forward.by.last.path to true. To customize
# the behavior, see com.liferay.portal.events.DefaultLandingPageAction in
# the "login.events.post" property above.
#
default.landing.page.path=
#default.landing.page.path=/web/guest/login

Comprueba que tus métodos UtilUrls.generaLasthPath devuelven un objeto LastPath y que se crean con la siguiente url (como se indica en el portal.properties) "/web/guest/login"

Un saludo