Spring security, cargue de varias paginas de inicio

136 views
Skip to first unread message

jaider luis anillo garcia

unread,
Aug 31, 2011, 5:56:58 PM8/31/11
to spring-user...@googlegroups.com
Buenas tardes,

Compañeros, despues de mucho esfuerzo y dedicacion e logrado integrar spring security a mi aplicacion en zkoss, funciona sin problemas y todo hasta el momento bn validado, pero tengo una pequeña pregunta y es la siguiente, como podria hacer para que al momento de autenticarse de acuerdo al tipo de rol asignado me redireccione a paginas diferentes, a que se debe esto, lo que pasa es que mi aplicacion tiene una parte que es abierta al publico y otra que es solo para trabajadores de la empresa, entonces como podria llamar a las paginas diferentes de acuerdo al rol?

Por default siempre entro a la pagina corporativa....

<form-login login-page="/zkloginDialog.zul"
            authentication-failure-url="/zkloginDialog.zul?login_error=1"
            default-target-url="/pages/index.zul" />


 Agradezco su colaboracion.....
--
JAIDER ANILLO GARCIA

cesar ricardo guerra arnaiz

unread,
Aug 31, 2011, 6:21:30 PM8/31/11
to Comunidad Spring Peru

Si tu problema es la navegacion de tu aplicativo usando Spring Security. Por ejemplo en mi caso esta es una parte de la configuracion que tengo en mi:  spring-security.xml


    <security:http auto-config="true"
                   access-denied-page="/procesoAccesoRestringido.do" > 
   
            <security:intercept-url pattern="/index.jsp"     filters="none" />
            <security:intercept-url pattern="/jsp/menu.jsp"  filters="none" />

            <security:intercept-url pattern="/jsp/listar.jsp"      access="ROLE_ADMIN, ROLE_USER, ROLE_SUPERVISOR" />
            <security:intercept-url pattern="/jsp/informacion.jsp" access="ROLE_ADMIN, ROLE_USER " />  <!-- El 'ROLE_SUPERVISOR', no podra acceder a: 'informacion.jsp' -->
           
            <security:form-login login-page            = "/procesoLogin_OK.do"
                                 default-target-url            = "/procesoBienvenida.do"
                                 authentication-failure-url = "/procesoLogin_ERROR.do?errorParam=1"             
                                 />
            <security:anonymous  />
            <security:http-basic />     
            <security:logout logout-success-url="/procesoLogin_OUT.do" />
                     
    </security:http>


Esta configuracion esta amarrada a una clase controladora llamada: LoginController.java, en la cual me creo lo metodos relacionados a los nombres que estan en la configuracion (estos deben estar de la mano con la Anotaciones).  Aqui te muestro tres de los metodos que contiene: procesoLogin_OK, procesoLogin_ERROR y procesoAccesoRestringido que se apoyan en un objeto ModelAndView para ek retorno. Saludos.


   /**
     * procesoLogin_OK
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
    @RequestMapping( value="/procesoLogin_OK.do", method=RequestMethod.GET )
    public ModelAndView procesoLogin_OK( ModelMap modelo, HttpServletRequest request ){
           //System.out.println( "DENTRO DE [procesoLogin_OK]" );
     
           NAVEGACION = "login";
           
           ModelAndView objNavegacion = new ModelAndView( NAVEGACION );
       
           return objNavegacion;
    }
   
    /**
     * procesoLogin_ERROR
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
    @RequestMapping( value="/procesoLogin_ERROR.do", method=RequestMethod.GET )
    public ModelAndView procesoLogin_ERROR( ModelMap modelo, HttpServletRequest request ){
           //System.out.println( "DENTRO DE [procesoLogin_ERROR]" );
           
           String vErrorParam = request.getParameter( "errorParam" );
           System.out.println( "PARAMETRO: " + vErrorParam );
     
           NAVEGACION = "login";
           
           ModelAndView objNavegacion = new ModelAndView( NAVEGACION );
            
           if( vErrorParam != null ){
               objNavegacion.addObject( "errorParam", "TRUE" );
               objNavegacion.addObject( "mensajeError_01", Constantes.SECURITY_MSG_ERROR_01 );
               objNavegacion.addObject( "mensajeError_02", Constantes.SECURITY_MSG_ERROR_02 );
               objNavegacion.addObject( "mensajeError_03", Constantes.SECURITY_MSG_ERROR_03 );
           }
          
           return objNavegacion;
    }


    /**
     * procesoAccesoRestringido
     * @param  modelo
     * @param  request
     * @return ModelAndView
     **/
    @RequestMapping( value="/procesoAccesoRestringido.do", method=RequestMethod.GET )
    public ModelAndView procesoAccesoRestringido( ModelMap modelo, HttpServletRequest request ){
           //System.out.println( "DENTRO DE [procesoAccesoRestringido]" );
       
           NAVEGACION = "accesoRestringido";
           
           ModelAndView objNavegacion = new ModelAndView( NAVEGACION );
       
           return objNavegacion;
    }


Cesar Ricardo Guerra Arnaiz



Date: Wed, 31 Aug 2011 16:56:58 -0500
Subject: [springperu] Spring security, cargue de varias paginas de inicio
From: jaide...@gmail.com
To: spring-user...@googlegroups.com
--
Has recibido este mensaje porque estás suscrito al grupo "Spring User Group Peru" de Grupos de Google.
Para publicar una entrada en este grupo, envía un correo electrónico a spring-user...@googlegroups.com.
Para anular tu suscripción a este grupo, envía un correo electrónico a spring-user-group...@googlegroups.com
Para tener acceso a más opciones, visita el grupo en http://groups.google.com/group/spring-user-group-peru?hl=es.

jaider luis anillo garcia

unread,
Aug 31, 2011, 6:47:15 PM8/31/11
to spring-user...@googlegroups.com
Me gusta tu respuesta es mas me da luces para implentar otras cositas que tenia en mente, pero la pregunta es si atraves de esta forma, es posible hacer lo ke quiero, osea por ejemplo: Si juan es de role "ADMIN" que me mande  a la pagina "admin.jsp" y si entra jose con role visitante me envie a "visitante.jsp"....Me hago entender?

Es esto posible?, o debo siempre dirigirme a una  "default-target-url  " y desde ahi hacer la redireccion a traves de unos enlaces validados con spring security.

Gracias...
--
JAIDER ANILLO GARCIA

cesar ricardo guerra arnaiz

unread,
Aug 31, 2011, 6:59:41 PM8/31/11
to Comunidad Spring Peru

mnmnn no se exactmanete si puedar redireccionar una navegacion desde JAVA, en base al ROL aplicado. Pero por ejemplo yo haria algo asi. En un mismo JSP limitaria en base al ROL la visibilidad del formulario HTML con los Tags de Spring Security.
 
            <!-- ************ PRIVILEGIOS PARA: [ADMINISTRADOR]  ************ -->  
            <security:authorize ifAllGranted="ROLE_ADMIN" >
                  AQUI: OPCIONES HTML PARA "ROLE_ADMIN" .
             </security:authorize>

    

            <!-- *************** PRIVILEGIOS PARA: [USUARIO]  *************** -->  
            <security:authorize ifAllGranted="ROLE_USER" >              
                  AQUI: OPCIONES HTML PARA "ROLE_USER" .
            </security:authorize>


Saludos.


Cesar Ricardo Guerra Arnaiz



Date: Wed, 31 Aug 2011 17:47:15 -0500
Subject: Re: [springperu] Spring security, cargue de varias paginas de inicio

Jose Luis Manrique Cabana

unread,
Aug 31, 2011, 7:13:54 PM8/31/11
to spring-user...@googlegroups.com
Hola Jaider, hasta donde recuerdo en Spring MVC se puede hacer redirect, con el dato que paso Cesar (invocar un action) dentro del código java podrías llamar a una redirección sin problemas, usando el prefijo "redirect:" o quiza usando el HttpResponse. Para mayor referencia mando el enlace de la parte de Spring MVC:


Espero te sea de ayuda!
Saludos cordiales,
Jose Luis Manrique Cabana


Lennon Shimokawa

unread,
Aug 31, 2011, 7:52:47 PM8/31/11
to spring-user...@googlegroups.com
El default-target-url puede dirigir a un Controller, y este hacer un redirect a la vista que deseas dependiendo del rol.

Puedes acceder al usuario autenticado con:
SecurityContextHolder.getContext().getAuthentication().getPrincipal()

cesar ricardo guerra arnaiz

unread,
Aug 31, 2011, 10:09:31 PM8/31/11
to Comunidad Spring Peru
Es verdad si es posible acceder al ROL del usuario autenticado, como menciona Lennon. Pero con el getAuthorities() obtienes el rol de una forma mas directa.


Object  objData = (Object)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Object  objRol   = (Object)SecurityContextHolder.getContext().getAuthentication().getAuthorities();

System.out.println( "- DATA:  " + objData );   //Data completa.
System.out.println( "- ROl:     "  + objRol   );    //Rol en si.



Al ejecutar si probamos imprimira en mi caso:

- DATA:  org.springframework.security.core.userdetails.User@44e9ec7c: Username: rguerra; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN

- ROl:     [ROLE_ADMIN]



Saludos.


Cesar Ricardo Guerra Arnaiz



Date: Wed, 31 Aug 2011 16:52:47 -0700
From: lshim...@gmail.com
To: spring-user...@googlegroups.com

Subject: Re: [springperu] Spring security, cargue de varias paginas de inicio

--
Has recibido este mensaje porque estás suscrito al grupo "Spring User Group Peru" de Grupos de Google.

jaide...@gmail.com

unread,
Sep 1, 2011, 6:56:34 AM9/1/11
to spring-user...@googlegroups.com
Hola, gracias a todos, porque hasta el momento han sido de mucha ayuda, me han dado la claridad que necesitaba, probare clo que me dice Lennon, de redireccionar el default url a un controller y desde alli administrar las respectivas paginas a abrie de acuerdo a su rol o grupo al que pertenezca.

Gracias

Enviado desde mi Nokia
-----Mensaje original-----
De: cesar ricardo guerra arnaiz
Enviados: 01/09/2011 06:39:31
Asunto: RE: [springperu] Spring security, cargue de varias paginas de inicio


Es verdad si es posible acceder al ROL del usuario autenticado, como menciona Lennon. Pero con el getAuthorities() obtienes el rol de una forma mas directa.


Object objData = (Object)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Object objRol = (Object)SecurityContextHolder.getContext().getAuthentication().getAuthorities();

System.out.println( "- DATA: " + objData ); //Data completa.
System.out.println( "- ROl: " + objRol ); //Rol en si.


Al ejecutar si probamos imprimira en mi caso:

- DATA: org.springframework.security.core.userdetails.User@44e9ec7c: Username: rguerra; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN

- ROl: [ROLE_ADMIN]


Saludos.


Cesar Ricardo Guerra Arnaiz


Reply all
Reply to author
Forward
0 new messages