acegi扩展AbstractFilterInvocationDefinitionSource

acegi扩展AbstractFilterInvocationDefinitionSource
 1  package  com.rdk.security.intercept.web;
 2 
 3  import  net.sf.acegisecurity.intercept.web.FilterInvocationDefinitionSource;
 4  import  net.sf.acegisecurity.intercept.web.AbstractFilterInvocationDefinitionSource;
 5  import  net.sf.acegisecurity.ConfigAttributeDefinition;
 6  import  net.sf.acegisecurity.SecurityConfig;
 7 
 8  import  java.util.Iterator;
 9 
10  import  com.rdk.security.persistence.ActionDao;
11  import  com.rdk.security.domain.Action;
12  import  com.rdk.security.domain.RoleAction;
13  import  com.rdk.core.NullParameterException;
14  import  org.springframework.dao.IncorrectResultSizeDataAccessException;
15 
16  /**
17  * Clase encargada de implementar la propiedad ObjectDefinitionSource para la clase de acegi
18  * FilterSecurityInterceptor esta implementacion le entrega el objeto ConfigAttributeDefinition
19  * con los roles permitidos a acceder a la url pasada como parametro.
20  * User: Rodney Gallart ([email protected])
21  * Date: Jan 25, 2005
22  * Time: 4:20:04 PM
23  */
24  public   class  DaoBasedFilterInvocationDefinitionSource
25  extends  AbstractFilterInvocationDefinitionSource
26  implements  FilterInvocationDefinitionSource {
27 
28  private  ActionDao actionDao;
29  /**
30  * Implementacion dao de los objetos de tipo Action
31  @param  actionDao
32  */
33  public   void  setActionDao(ActionDao actionDao) {
34  this .actionDao  =  actionDao;
35  }
36 
37  /**
38  * A este metodo se le pasa como parametro la url que se quiere acceder y devuelve el objeto
39  * ConfigAttributeDefinition donde vienen los roles que pueden acceder a esa url
40  *
41  * ConfigifAttributeDefinition contiene una lista de objetos que implementan la interfaz ConfigAttribute
42  * puede ser SecurityConfig (Roles como String)
43  *
44  * Ahora con la url pasada como parametro debe hacerse una busqueda en una lista de acciones cuando se encuentre
45  * la accion a la cual pertenece la url entonces se devuelve la lista de Roles
46  * TODO Analizar la posibilidad de implementar un mecanismo de cache Mapa(url, Action) y bajo que condiciones vaciarlo
47  @param  url Pasada como paremetro para buscar sus roles permitidos
48  @return  ConfigAttributeDefinition
49  */
50  public  ConfigAttributeDefinition lookupAttributes(String url) {
51  if  (url  ==   null )
52  throw   new  NullParameterException( " Parametro url null " );
53  try  {
54  url  =  url.toLowerCase();
55  url  =  url.substring( 1 );
56  if  (url.contains( " & " ))
57  url  =  url.substring( 0 , url.indexOf( " & " ));
58  Action act  =  actionDao.findByUrl(url);
59  return  obtainRolesInConfigAttributeDefinitionObject(act);
60  }
61  catch  (IncorrectResultSizeDataAccessException ex) {
62  return   null ;
63  }
64  }
65 
66  /**
67  * En este metodo se van a obtener los roles asociados a la accion y se va a crear el
68  * objeto de tipo ConfigAttributeDefinition con la lista de objetos SecurityConfig
69  @param  act
70  @return
71  */
72  private  ConfigAttributeDefinition obtainRolesInConfigAttributeDefinitionObject(Action act) {
73  ConfigAttributeDefinition cad  =   new  ConfigAttributeDefinition();
74  Iterator it  =  act.getRoles().iterator();
75  while (it.hasNext()) {
76  RoleAction ra  =  (RoleAction) it.next();
77  SecurityConfig sc  =   new  SecurityConfig(ra.getRole().getName());
78  cad.addConfigAttribute(sc);
79  }
80  return  cad;
81  }
82 
83  public  Iterator getConfigAttributeDefinitions() {
84  return   null ;
85  }
86 
87  }
88 

你可能感兴趣的:(acegi扩展AbstractFilterInvocationDefinitionSource)