Hola, estoy realizando una aplicacion web en java, con el framework Struts, y estoy intentando usar el control de acceso que me proporciona. Quiero realizar una gestion de perfiles que ofrezca o restrinja funcionalidades dependiendo del rol del usuario autenticado.
He probado a realizarlo para el Login.Para ello sigo los siguientes pasos:
1)En el struts-config añado los roles que deberian tener acceso en el action Login:
<action input="/index.jsp"
name="LoginForm" path="/login" scope="session" roles="Administrador" validate="true" type="modelo.gestion.usuarios.LoginAction">
<forward name="OK"
path="/inicio/inicio.jsp">
</forward>
<forward name="ERROR"
path="/index.jsp">
</forward>
</action>
2)Extiendo la clase RequestProcessor sobreescribiendo ProcessRoles para realizar la validacion de que cumpla con los roles para entrar en la pagina de inicio:
public class StrutsRequestProcessor extends RequestProcessor{
protected boolean processRoles(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException{
String roles[] = null;
roles[0]="Administrador";
if ((roles == null) || (roles.length < 1))
{
return true;
}
HttpSession ses = request.getSession();
UsuarioBean u = (UsuarioBean)ses.getAttribute("usuario");
System.out.println("El rol es: "+ u.getRol());
for (int i = 0; i < roles.length; i++) {
if (u.getRol().equals(roles[i])) {
if (log.isDebugEnabled()) {
log.debug(" User '" + request.getRemoteUser()
+ "' has role '" + roles[i] + "', granting access");
}
return (true);
}
}
3)Le digo a struts que la clase que implementa la validacion de roles es la que yo he sobreescrito:
<controller>
<set-property property="processorClass"
value="roles.StrutsRequestProcessor"/>
</controller>
Sino tengo mal entendido, estos son los pasos que hay que realizar. Sin embargo, cuando me logueo, lo haga con el rol de Administrador, o sin el rol de Administrador, me redirige a una de las paginas de error de mi proyecto, ni siquiera a la pagina de error de la accion LoginAction. Es muy raro.
Alguien sabe si hay algun paso, que no conozco y que hay que realizar?? O si hay algo mal en mi codigo?.
Necesito vuestra ayuda!!
Marcadores