IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Préciser les urls protégées par programmation


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Préciser les urls protégées par programmation
    Bonjour tout le monde,

    Je viens d'intégrer SpringSecurity dans une application Web. J'ai codé mon prope UserDetailsService afin d'aller rechercher les utilisateurs dans ma base de données.
    Je voudrais également préciser par programmation qui à accès à quoi. Actuellement j'ai étendu AbstractAccessDecisionManager mais en analysant un peu mieux les arguments de la méthode decide(Authentication auth, Object url, ConfigAttributeDefinition attributes), je me rend compte que l'objet ConfigAttributeDefinition contient la liste des roles ayant accès à l'url. Je me dis qu'il doit docn y avoir moyen de surcharger une autre classe qui est chargée de décider quels roles sont attribués pour une URL mais je ne parviens pas à la trouver.

    L'un d'entre vous peut-il m'aider ?


    Merci

  2. #2
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Par défaut
    J'ai deja ete confronte a ce problemer quelques codes. Fonctionne avec acegi 1.0.4 Surement des tout petit reglage de package si tu dois les utliser avec spring security

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    ....
    <bean id="filterSecurityInterceptor"
    		class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
    		<property name="authenticationManager">
    			<ref bean="authenticationManager" />
    		</property>
    		<property name="accessDecisionManager">
    			<ref bean="accessDecisionManager" />
    		</property>
    		<property name="objectDefinitionSource" ref="objectDefinitionSource">
    		</property>
    	</bean>
    	<bean id="objectDefinitionSource" class= "org.os.peace.user.service.impl.UrlPatternRolesDefinitionSource" init-method="init">
    		<property name="convertUrlToLowercaseBeforeComparison">
    			<value type="boolean">true</value>
    		</property>
    		<property name="userManagement" ref="myUserManagementServices"/>
    	</bean>
    ...

    Une implémentation de la classe PathBasedFilterInvocationDefinitionMap
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    mport org.acegisecurity.intercept.web.PathBasedFilterInvocationDefinitionMap;
    import org.os.peace.user.daopojo.Ressource;
    import org.os.peace.user.daopojo.Role;
    import org.os.peace.user.service.UserManagement;
    import org.os.peace.utils.SpringServiceLocator;
    /**
     * 
     * @author moussa
     *
     */
    public class UrlPatternRolesDefinitionSource extends
    PathBasedFilterInvocationDefinitionMap  {
    	private UserManagement userManagement;
     
    	public void init() {
    		try {
     
    			//Charger les différentes ressources
    			List<Ressource> ressources = userManagement.findAllRessourcesFetch();
     
    			for (Ressource  ressource: ressources) {
    				ConfigAttributeDefinition configDefinition = new ConfigAttributeDefinition();
    				for (int i=0;i<ressource.getNumberRole();i++) {
    					Role role=ressource.
    					getRoleAt(i);
    					ConfigAttribute config = new SecurityConfig(role.getRole());
    					configDefinition.addConfigAttribute(config);
    				}
    				addSecureUrl(ressource.getValue(), configDefinition);
     
    			}
    		} catch (Exception e) {
    			// Handle exception
    			e.printStackTrace();
    		} finally {
    		}
    	}
     
    	public UserManagement getUserManagement() {
    		return userManagement;
    	}
     
    	public void setUserManagement(UserManagement userManagement) {
    		this.userManagement = userManagement;
    	}
     
    }
    L'objet Ressource ressource a comme attribut 'url a securise(attribut value) et il contient un ensemble de role

    Ci dessous son implementation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    package org.os.peace.user.daopojo;
     
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Set;
     
    public class Ressource {
    	private long id;
    	private String typeRessource;
    	private int orderNumber;
    	private String value;
    	private Set listRole;
    	public long getId() {
    		return id;
    	}
    	public void setId(long id) {
    		this.id = id;
    	}
    	public String getTypeRessource() {
    		return typeRessource;
    	}
    	public void setTypeRessource(String typeRessource) {
    		this.typeRessource = typeRessource;
    	}
     
    	public int getOrderNumber() {
    		return orderNumber;
    	}
    	public void setOrderNumber(int orderNumber) {
    		this.orderNumber = orderNumber;
    	}
    	public String getValue() {
    		return value;
    	}
    	public void setValue(String value) {
    		this.value = value;
    	}
    	public Set getListRole() {
    		return listRole;
    	}
    	public void setListRole(Set listRole) {
    		this.listRole = listRole;
    	}
     
    	public Role getRoleAt(int index){
    		if (listRole==null || listRole.size()<=index)
    			return null;
    		return (Role)new ArrayList(listRole).get(index);
    	}
     
     
    	public int getNumberRole(){
    		if (listRole==null)
    			return 0;
    		return listRole.size();
    	}
     
    }
    Cordialement

  3. #3
    Invité
    Invité(e)
    Par défaut
    Merci, je fesais déjà un équivalent à celà avec ACEGI. Mais avec Spring-Security et les nouveux schémas, y à t'il une façon encore plus simple d'y arriver ?

Discussions similaires

  1. Gérer les services W32 par programme
    Par Gugli dans le forum Delphi
    Réponses: 1
    Dernier message: 15/06/2007, 22h45
  2. Gérer les évènements VBA par programmation
    Par gbuxo dans le forum VBA Access
    Réponses: 14
    Dernier message: 09/05/2006, 11h13
  3. [Oracle9][import] Préciser les user concerné par un grant
    Par Carlito_superheros dans le forum Oracle
    Réponses: 1
    Dernier message: 28/12/2005, 21h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo