Toon posts:

[j2ee] universele toegang tot JspServlet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik werk aan een bestaande j2ee web applicatie. De security is zo geregeld dat alle aanvragen naar een servlet gaan. Deze controlleerd de toegang en geeft een jsp request door aan de class JspServlet. bv org.apache.jasper.servlet.JspServlet, com.evermind.server.http.JSPServlet, com.sun.server.http.pagecompile.jsp92.JspServlet etc etc.

Probleem is dus dat die JspServlet voor elke webserver ergens anders staat. Ik moet dus een standaard manier hebben om hem te krijgen maar kan die niet vinden.

Als ik deze eenmaal heb (nu dus telkens met de hand in de code) laat ik hem de jsp request afhandelen: jspservlet.service(request, respone). Ik heb alles geprobeerd maar er is echt geen andere manier of jsp secure te krijgen, alleen redirecten naar een ander domain kan maar dat is veel te langzaam en zonde.

  • nxt
  • Registratie: November 2001
  • Laatst online: 04-02 09:36

nxt

Als ik het goed begrijp gaan alle requests naar een servlet (de dispatcher)
en wil je vanuit die servlet een jsp pagina gebruiken.

kun je dat dan niet beter met de include of forward methods van de RequestDispather doen?

dus
code:
1
2
3
getServletContext().getRequestDispatcher("path").forward(request,response)
of 
getServletContext().getRequestDispatcher("path").include(request,response)
of is dat niet mogelijk?

[ Voor 7% gewijzigd door nxt op 10-09-2004 19:03 ]


Verwijderd

nxt schreef op 10 september 2004 @ 19:01:
Als ik het goed begrijp gaan alle requests naar een servlet (de dispatcher)
en wil je vanuit die servlet een jsp pagina gebruiken.

kun je dat dan niet beter met de include of forward methods van de RequestDispather doen?
Als je forward naar een jsp pagina kom je gewoon weer bij de proxy uit. Als je alleen maar een servlet hebt die de user opgeeft met een naam als parameter en die dan forward naar een jsp page, dan werkt het wel, maar kun je je .jsp pagina's ook zo benaderen. Het idee is hier volgens mij juist om een servlet mapping te maken van al je jsp pagina's, dus:

XML:
1
2
3
4
    <servlet-mapping>
        <servlet-name>some_servlet</servlet-name>
        <url-pattern>*.jsp</url-pattern>
    </servlet-mapping>


Als je deze servlet nu laat forwaren, dan roept ie zichzelf weer aan en creeer je een eindeloze lus. Je moet dus forwarden naar een ander domain. Hoewel ik zelf zo nooit geprobeerd hebt is dat volgens de topic starter klaarblijkelijk langzamer. Het is iniedergeval meer administratie werk omdat je nu 2 sites moet inrichten. Deze 2 sites kunnen dan weer wel op de dezelfde server draaien.

Het concept van de TS klinkt wel aardig:

1) Je mapped alle .jsp requests naar 1 servlet
2) Keurt de request goed of niet
3) geeft de request door aan de JSP compiler

Punt 3 is dan juist waar de schoen knelt. Ik heb zelf ook in de documentatie gezocht, maar er is geen interface om de JSP compiler te benaderen of zijn naam programatisch te achterhalen. Je kunt er wel makkelijk achter komen door in de configuratie files van de web server te kijken, daar staat altijd de class name van de default jsp compiler. Dit blijkt bijna altijd iets van "JspServlet" of JSPServlet te zijn, hoewel de locatie enorm kan verschillen (zie voorbeelden TS).

Hoe ik zelf JSP security doe is door een custom tag in elke JSP page op te nemen. Deze roept een authenticatie bean aan. Faalt dit dan wordt er geforward naar een login page, gaat het goed dat wordt gewoon de rest van de page gedaan.

Ik heb het mechanisme van de TS even geprobeerd, en het werkt wel, ofschoon de JspServlet classes dus eigenlijk interne, undocumented classes zijn. Alleen bij een test met Sun Application Server 8 kreeg ik een java security error, maar dat was op te lossen door de juiste grant te doen in server.policy.

Ik ben dus ook wel benieuwd of er toch een standaard portable manier is om aan de jsp compiler (een servlet dus) te komen.

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Verwijderd schreef op 11 september 2004 @ 01:04:
[...]
Hoe ik zelf JSP security doe is door een custom tag in elke JSP page op te nemen. Deze roept een authenticatie bean aan. Faalt dit dan wordt er geforward naar een login page, gaat het goed dat wordt gewoon de rest van de page gedaan.
Even een zijsprongetje. Waarom doe je dat niet met een Filter dat die controles doet? Dan hoef je alleen nog maar in web.xml dat filter te mappen op bijvoorbeeld *.jsp en je hebt dezelfde functionaliteit. Of mis ik een subtiel punt?

With the light in our eyes, it's hard to see.


Verwijderd

Bobco schreef op 11 september 2004 @ 10:08:

Even een zijsprongetje. Waarom doe je dat niet met een Filter dat die controles doet? Dan hoef je alleen nog maar in web.xml dat filter te mappen op bijvoorbeeld *.jsp en je hebt dezelfde functionaliteit. Of mis ik een subtiel punt?
Ja, je mist inderdaad een heel subtiel punt ;) Toen ik de security op zette, bestonden filters nog niet. Die kwamen pas met de Servlet 2.3 specificatie. Ik ben momenteel een beetje aan het kijken naar een betere / mooiere methode.

Echt een expert op J2EE gebied ben ik nog niet, dus er zullen best wel een aantal dingen zijn die ik over het hoofd zie of heb gezien. Met een custom tag werkt het wel, maar is mischien niet super mooi.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Verwijderd schreef op 11 september 2004 @ 10:16:
[...]


Ja, je mist inderdaad een heel subtiel punt ;) Toen ik de security op zette, bestonden filters nog niet. Die kwamen pas met de Servlet 2.3 specificatie. Ik ben momenteel een beetje aan het kijken naar een betere / mooiere methode.

Echt een expert op J2EE gebied ben ik nog niet, dus er zullen best wel een aantal dingen zijn die ik over het hoofd zie of heb gezien. Met een custom tag werkt het wel, maar is mischien niet super mooi.
Kijk even naar Filters, echt, scheelt je een berg problemen, en zo te lezen integreer je het zonder probleem in je huidige omgeving.

Ik heb trouwens 1 probleem met filters, en wel de mapping naar urls. Als ik een filter map naar *.jsp filtert hij alle requests naar een .jsp onafhankelijk van de dir waar het ding staat, als ik een filter definieer naar /secure filtert hij alle requests naar /secure. Maar als ik een mapping maak naar /secure/*.inc oid filtert ie niet :?

Kan dat gewoon niet volgens de spec?

[ Voor 22% gewijzigd door zneek op 11-09-2004 11:47 ]

Pagina: 1