Document:Overdracht Deelproject Framework Fase5 naar Fase6

From WOSI
Jump to navigation Jump to search
Overdrachts Documentatie Framework Fase5 naar Fase6
Datum 21 juli 2008
Fase Fase 5
Versie 0.1
Status Concept
Auteurs Ruud Jungbacker
Goedgekeurd door
Aangepast door

Project Woningcorporaties Open Source Initiatief

Overdrachts Documentatie Framework


Inleiding

Dit is een overdrachtdocument welke de overgang van fase 5 naar fase 6 omschrijft. Hiermee is het de bedoeling dat de overgang van de ene fase naar de andere soepel verloopt.


In fase 5 is er een overstap gemaakt van een oude naar een nieuwe database. Deze database is ontworpen zodat de hele applicatie heel flexibel kan zijn. Hierdoor is de hele onderliggende code veranderend anders kon deze niet met de database gecommuniceerd worden. Hierdoor lijkt het dat er in fase 5 niet zoveel aan het project is gedaan. Dit klopt ook aan de voorkant, maar de onderliggende onderdelen van de applicatie zijn zeer veranderd.


Verder is er ook begonnen met een nieuw project. Dit project is aan begonnen omdat de woningcorporatie uit Enschede, “De woonplaats”, een werkende applicatie wil gaan implementeren om hun verkoop van woningen in de gaten te kunnen houden. Hierover is meer te vinden in de documentatie die over de bezoeken aan De woonplaats in fase 5 zijn geschreven.


Zo zijn er dus de projecten Sales en Web. Web is het oude project uit fase 4 welke al redelijk wat functionaliteit in zich had. Maar over deze verdeling zal meer worden geschreven in de overdrachtdocumentatie van het module team. Maar door deze wijzigingen zijn er verschillende wijzigingen doorgevoerd in het framework.

Spring Security

Binnen het framework gedeelte van project WOSI is een belangrijk aspect de beveiliging van het systeem. In deze fase is er een nieuwe versie van Spring Security geïnstalleerd. Hieronder staat beschreven wat er is gedaan en wat de taken zijn voor de komende fase.

Wat hebben we gedaan

Wij hebben het Acegi beveiligings project vervangen met een nieuwe versie van Spring Security. Dit hebben we in het project geintegreerd en geconfigureerd. De volgende dingen werken nu in het framework via Spring Security:


  • In en uitloggen
  • Authenticitie gebaseerd op gebruikers in de database
  • Verschillende autorisatie voor verschillende gebruikers
  • Het weglaten van bepaalde pagina elementen voor bepaalde gebruikers
  • Gebruikers kunnen nu verschillende rollen tegelijk hebben

Wat kan er nog gedaan worden

De huidige configuratie van Spring Security is nog behoorlijk simpel. Een aantal dingen die goed zouden zijn om toe te voegen:


Beter af te stellen autorisatie

Autorisatie wordt nu bepaald aan de hand van de rol van een gebruiker. Zodra er een nieuw onderdeel aan een applicatie wordt toegevoegd moet het bijbehorende URL pattern worden toegevoegd aan de application context van Spring Security. Verder moeten menu items per rol wel of niet worden weergegeven.

URL patterns ophalen uit de database

Op dit moment staan de URL patterns die Spring Security gebruikt opgeslagen in de Spring Security Application context. Dit maakt het onmogelijk om dynamisch authenticatie te wijzigen. Hierdoor is het zo dat er wel dynamisch rollen kunnen worden toegevoegd in de applicatie. Maar wanneer je deze hebt toegevoegd heeft deze helemaal geen rechten. Het is mogelijk om een eigen AuthenticationManager te implementeren die dit soort gegevens uit de database haalt. Dit is in fase 4 al uitgedacht alleen is hier in fase 5 nooit verder meegegaan.


Encrypted Passwords

Passwords worden tot nog toe nog steeds als plain text opgeslagen. Dit is natuurlijk onaanvaardbaar, maar tegelijk erg makkelijk om voor je uit te schuiven. Spring Security ondersteund verschillende password encoders. Het enige wat gedaan hoeft te worden is het toevoegen van een passwordencoder bean aan de Spring Security application context en het aanpassen van de code die verantwoordelijk is voor het opslaan van passwords in de database.


Dit is echter al werkzaam in de oude applicatie zoals deze nu in de svn trunk staat. Hier werkt het met een MD5 encryptie. Deze is echt nog niet in het framework geïmplementeerd welke met de nieuwe database werkt. Dit zal dus nog moeten worden overgezet.

Beter afgestelde filter

Momenteel draait het Spring Security filter op de root van de webapplicatie. Dit betekend dat elk request eerst wordt doorgegeven aan Spring Security. Voor dit project is het echter waarschijnlijk niet nodig om statische content als plaatjes en javascript van authenticatie te voorzien. Als je de structuur van de webapplicatie wat aanpast zodat er een aparte /static map is voor deze content kun je nog wat performance winnen door het Spring Security filter niet op deze files te laten opereren.


Waar kan ik meer te weten komen over Spring Security

De links welke hieronder staan zijn nog steeds naar de site van Acegi Securtity. Maar dat komt omdat het project alleen maar is hernoemt naar Spring Security. Het is nog dezelfde basis als het oude Acegi project.


http://www.acegisecurity.org/ (tutorials, reference guide en een forum)http://www.acegisecurity.org/acegi-security/apidocs/index.html (API Documentatie)


Verder hebben ze in de vorige fasen ondervonden dat het niet altijd simpel is om via Google je problemen met Acegi/Spring Security op te lossen. Gelukkig kun je meestal nog wel op externe deskundige Peter Maas terugvallen als je problemen hebt, hij heeft naast een uitgebreide ervaring met Spring ook verstand van het beveiliging aspect binnen Spring.

Plain Old Java Objects (POJO)

In fase 5 zijn ook de Plain Old Java Objects, de POJO’s, aangepast. Hieronder zal beschreven worden wat er precies is aangepast en wat er de komende fase nog te doen staat.

Wat hebben we gedaan

Voor het integreren van de nieuwe database hebben we hele nieuwe POJO’s moeten schrijven. Dit is gedaan door het database model met een tool om te zetten in POJO’s. Deze tool is te vinden op de site van Hibernate zelf (tools.hibernate.org). De nieuwe database welke gegenereerd is door het database team met het programma PowerDesigner is door deze tool gehaald. Hierdoor hebben de nieuwe POJO’s soms een rare naamgeving.

Wat kan er nog gedaan worden

Door de haast welke we in het project hebben ervaren hebben we bepaalde dingen deze fase niet kunnen doen. Hieronder staan ze beschreven.

Naamgeving attributen

De naamgeving van de attributen is op sommige punten een beetje verwarrend. Dit komt zoals eerder gezegd omdat de POJO’s automatisch zijn gegenereerd en daarbij hebben ze de benamingen uit de database overgenomen. Hierdoor is het zo dat ze af en toe raar zijn toegepast. Voor de leesbaarheid van de code zou dit kunnen worden veranderd.


Services en Utils

In fase 5 hebben ook wijzigingen plaatsgevonden in de projecten Services en Utils. Hieronder zal beschreven worden wat er precies is aangepast en wat er de komende fase nog te doen staat.

Wat hebben we gedaan

Omdat de POJO’s totaal zijn gewijzigd ten opzichte van de nieuwe database en er vraag was naar nieuwe functionaliteiten hebben we het hele Services project moeten wijzigen. Hier zijn dus allemaal nieuwe implementaties van services te vinden welke voor de nieuwe POJO’s zijn gemaakt. Hierdoor kan de nieuwe database nu gebruikt worden zoals deze bedoelt is.


Verder zijn er validators, welke de formulieren controleren of de juiste gegevens zijn ingevuld, ook deels verplaatst van het Utils project naar het Services project. Verder zijn er bij de Utils verschillende decorators bij gekomen. Dit om bijvoorbeeld de datum correct te laten zien in de overzichten.

Wat kan er nog gedaan worden

Door de haast welke we in het project hebben ervaren hebben we bepaalde dingen deze fase niet kunnen doen. Hieronder staan ze beschreven.

Naamgeving services

Binnen de services zitten soms rare benamingen. Dit ook dankzij de POJO’s. Maar door de benamingen van de functies in de verschillende functies wat meer in één lijn te maken wordt de code overzichtelijker en makkelijker te onderhouden.

Commentaar

Er moet voor de verschillende onderdelen nog veel commentaar worden geschreven. Dit ook om de onderhoudbaarheid van de code te vergroten. Er staat op sommige momenten Nederlands commentaar en alles moet omgeschreven in het Engels. Ook moet de Engelse taal hierin worden nagekeken zodat er geen verkeerde opvattingen worden gemaakt.

Uitbreidingen

De services en utils projecten zijn natuurlijk nog niet helemaal af. Er zit nog verschillende functies in de services welke niet zo slim zijn geschreven. Het staat meestal aangegeven in het commentaar van deze functies. Deze kunnen een stuk efficiënter worden gemaakt.


Verder kan dubbele code uit de twee projecten worden gehaald. Hierdoor wordt de code natuurlijk ook weer overzichtelijker.

Overige veranderingen

Er staan natuurlijk nog een hoop wijzigen te doen in het framework. Dit zullen dan ook vooral wijzigingen zijn welke nodig zijn voor het module team of database team.


De meeste van de taken die in dit document staan zijn onderhoudstaken. Het is namelijk nu heel moeilijk te omschrijven wat er nog aan het framework moet gebeuren.


Zoals is besproken is beveiliging een belangrijk aspect voor de woningcorporaties. Hier kan natuurlijk een hoop onderzoek naar worden uitgevoerd. Zoals bijvoorbeeld hoe je de verschillende rollen kan aanmaken met wat iemand wel en niet mag doen binnen de applicatie. Zodra je nu een rol aanmaakt kan deze helemaal niets in de applicatie en dit moet in de Spring Security configuratie bestanden worden aangepast. Hierdoor is dit gedeelte van de applicatie niet echt bruikbaar.


Verder is het zo dat het framework mede bepaald wordt door het module en database team. Het framework zal moeten reageren op de veranderingen welke beide willlen doorvoeren. En eventueel hier een adviserende rol in moeten spelen. Het is dan ook handig om niet als een apart te team te fungeren maar een beetje te mengen in deze twee teams. Zo kunnen wijzigingen snel worden doorgevoerd.

Meer informatie over Spring en Hibernate

Hieronder staat aangegeven waar je als eerste kunt zoeken als je problemen krijgt met Spring of Hibernate. Als eerste hulpmiddel, kan je natuurlijk surfen naar je favoriete zoekmachine, maar als je er dan nog niet uit bent staan hier nog wat mogelijkheden:


  • Er zijn verschillende boeken in de kast van het WOSI lokaal C2.05, o.a.
    • Hibernate, A J2EE Developer’s Guide – Will Iverson
    • Agile Java Development with Spring, Hibernate and Eclipse - Anil Hemrajani.
    • Expert Spring MVC and Web Flow – Seth Ladd
  • http://www.springframework.org/

Informatie over Spring

Informatie over Hibernate

Handleidingen en overdrachtdocumentatie