[Java] Acegi probleem

Pagina: 1
Acties:

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Hoi, ik probeer mezelf wat te bekwamen in beveiligingen en gebruik daarvoor het Acegi-framework. Ik heb ergens een tutorial gevonden, en ik heb dat 1:1 nagebouwd in een unittest. Het enige verschil is dat de bean die ik wil beveiligen van een andere class is dan die in de tutorial.

Hier mijn de configuratie van Acegi in mijn spring-config:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    <bean id="beveiligdPand" class="bla.blo.bli.Pand"/>
    
    <bean id="autoProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
        <property name="interceptorNames">
            <list><value>securityInterceptor</value></list>
        </property>
        <property name="beanNames">
            <list><value>beveiligdPand</value></list>
        </property>
    </bean>

    <bean id="securityInterceptor" class="net.sf.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
        <property name="authenticationManager" ref="authenticationManager"/>
        <property name="accessDecisionManager" ref="accessDecisionManager"/>
        <property name="objectDefinitionSource">
        <value>
            bla.blo.bli.Pand.setBouwjaar=ROLE_MANAGER
            bla.blo.bli.Pand.getBouwjaar=ROLE_WORKER,ROLE_MANAGER
        </value>
        </property>
    </bean>


Hier is het relevante deel van mijn unittest:
code:
1
2
3
4
5
6
7
8
9
10
    public void testPandAccessManager() {
        createSecureContext(_ctx,"manager","manager");
        try {
            Object o = _ctx.getBean("beveiligdPand");
            Pand p = (Pand) o;
            p.setBouwjaar(12); //moet goed gaan want ik ben manager
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


Wanneer ik in de debugger het object o inspecteer, dan is dit weliswaar een Proxy-object, maar hij is niet te converteren naar Pand. In de debugger kan ik het Pand-object wel vinden via o.h.advised.targetsource.target, maar dat is natuurlijk niet de bedoeling; als ik het 'beveiligdPand'-bean ophaal moet dat gewoon een Pand-object zijn.

Heeft iemand enig idee wat ik over het hoofd zie?

Siditamentis astuentis pactum.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:43

Janoz

Moderator Devschuur®

!litemod

Als het goed is heeft het proxy object dezelfde methoden. Hoe probeer je in de rest van je code het Pand object te krijgen? hmm Staat er al

[ Voor 34% gewijzigd door Janoz op 28-12-2005 14:40 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Even voor de duidelijkheid, hier gaat het dus fout:
code:
1
2
3
   Object o = _ctx.getBean("beveiligdPand");  // Gaat zonder problemen

   Pand p = (Pand) o; // ClassCastException

Siditamentis astuentis pactum.


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Ik ben er uit hoor. Ik moest voor Pand een interface schrijven, en het bean naar zo'n interface-object casten. Dan gaat 't allemaal goed.

Wat heb ik nu geleerd? Netter de tutorials overtypen... :-)

[ Voor 5% gewijzigd door Varienaja op 28-12-2005 15:16 ]

Siditamentis astuentis pactum.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:43

Janoz

Moderator Devschuur®

!litemod

Och, ik vermoede al zoiets, maar ik kon het zo snel niet terugvinden. Ikzelf gebruik Acegi tegenwoordig alleen nog maar om mijn servlets te beveiligen. Ik had het nog niet ingezet voor het securen van mijn classes. Even goed onthouden voor het geval ik het daarbij wel ga gebruiken :D..

[ Voor 15% gewijzigd door Janoz op 28-12-2005 15:34 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Je probleem is nu wel opgelost, maar ik ben toch nieuwsgierig naar je ervaringen met het acegi security framework. Werkt het een beetje voor je?

Al best-pracives die je met de groep kan delen?

Aangezien ik zeer binnenkort ook eens de acegi jungle ga betreden, zou het wel handig zijn als je je nota's en dergelijk kon delen. Misschien ook wel tof om in een aantal stappen te beschrijven hoe je het allemaal hebt opgezet.

  • Bbfreak
  • Registratie: September 2002
  • Laatst online: 04-02 10:03
Ik heb ook een default Acegi implementatie gemaakt.
Dit betekend dat alles behalve de index.jsp afgevangen worden en beveiligd zijn.
Dit heb ik geimplementeerd adhv deze tutorial.
Het voordeel vind ik dat je helemaal geen code hoeft te implementeren.
Het enige wat je hoeft te doen is het toevoegen van beans aan je applicationContext.xml en het aanmaken van filters in je web.xml.
Hiermee heb ik voor mijn kleine project genoeg beveiliging.
Maar zoals je zegt Acegi is een jungle en je kunt er ontzettend veel mee maar dat vereist
toch wel enige oefening. Ik hoop dat je hier wat aan hebt.

Twitter @cmeerbeek / Halo Waypoint Profile


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
Op dit moment ben ik Acegi zo'n beetje aan het verkennen. Voor m'n werk wil ik het gaan gebruiken om een webapplicatie te gaan beveiligen. Dit zal natuurlijk op URL-niveau gebeuren. We hebben ook enkele klanten die een samenwerkingsverband vormen. Deze klanten gebruiken dus 1 database en 1 server, maar de gebruikers mogen geen data schrijven/veranderen die van een andere klant is. Het lezen van elkaars gegevens is wel gewoon toegestaan.

Dit leek me daarom een uitgelezen kans om eens flink met Acegi te gaan spelen. Tot nu toe vind ik het er goed uitzien, maar dat is altijd al zo met Spring-dingen. Je schrijft gewoon je klassen zonder ergens rekening mee te houden, en je hangt er later gewoon security omheen. Handig hoor!

[ Voor 3% gewijzigd door Varienaja op 29-12-2005 09:32 ]

Siditamentis astuentis pactum.


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Varienaja schreef op donderdag 29 december 2005 @ 09:31:
Op dit moment ben ik Acegi zo'n beetje aan het verkennen. Voor m'n werk wil ik het gaan gebruiken om een webapplicatie te gaan beveiligen. Dit zal natuurlijk op URL-niveau gebeuren. We hebben ook enkele klanten die een samenwerkingsverband vormen. Deze klanten gebruiken dus 1 database en 1 server, maar de gebruikers mogen geen data schrijven/veranderen die van een andere klant is. Het lezen van elkaars gegevens is wel gewoon toegestaan.
Hmm, beschrijft precies een gelijkaardig soort applicatie waaraan ik momenteel aan het werken ben. Voor diezelfde applicatie had ik dan ook graag eens met Acegi aan het werk gegaan.
Dit leek me daarom een uitgelezen kans om eens flink met Acegi te gaan spelen. Tot nu toe vind ik het er goed uitzien, maar dat is altijd al zo met Spring-dingen. Je schrijft gewoon je klassen zonder ergens rekening mee te houden, en je hangt er later gewoon security omheen. Handig hoor!
Hoe ben je hieraan begonnen? Of hoe zag je initiele setup er uit?

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Topicstarter
-FoX- schreef op donderdag 29 december 2005 @ 12:01:
Hoe ben je hieraan begonnen? Of hoe zag je initiele setup er uit?
Ik heb m'n webapplicatie niet gewijzigd. Ik begin altijd met het maken van een extra unittest. In dit geval dus met het beveiligen van de toegang tot een methode van een Pand-object. Dit heb ik nu onder de knie, dus ik ga nu verder met een stapje hoger: een hele vracht panden uit de database ophalen, waarbij de panden waarvan ik 'eigenaar' ben wel mogen worden gewijzigd, en de panden die niet van mij zijn niet.

Zodra dat allemaal goed gaat hang ik dezelfde code ook in de webapplicatie zelf. (Ik heb dus twee Spring-configuraties die normaal gesproken een kopie van elkaar zijn. Eentje voor de daadwerkelijke applicatie, en eentje voor de unittests.)

Siditamentis astuentis pactum.

Pagina: 1