Deel XIX Security, Servlets & authenticatie 1 Internetapplicaties Deel XIX: Security, Servlets & Authenticatie
Deel XIX Security, Servlets & authenticatie2 Inhoud Herhaling: verband tussen JSP en Java: servlets De plaats van servlets in een JSP-applicatie Als hulpmiddel voor jsp’s Als controller in MVC De servlet-architectuur Een servlet laten draaien VoorbeeldServlet.java web.xml Authenticatie met servlets Basic Form based
Deel XIX Security, Servlets & authenticatie3 Even herhalen: Verband tussen JSP en Java: Servlets 1. Iemand schrijft een JSP, bvb hallo.jsp: HTML script-tags met java-code ertussen -> deze code hoef je zelf niet te compileren Eventueel speciale tags om JavaBeans te gebruiken 2. Hallo.jsp wordt opgevraagd in een request. De ‘java- enabled web container’ (bij ons de Tomcat web server) doet het volgende: zet hallo.jsp om naar hallo_jsp.java die een zogenaamde servlet is compileert dit bestand tot hallo_jsp.class.
Deel XIX Security, Servlets & authenticatie4 Even herhalen: Verband tussen JSP en Java: Servlets 3. De servlet (letterlijk servertje) zal dan dynamisch html-pagina’s genereren ze doorsturen naar de browsers. (View/Source geeft jsp-bestand niet weer) 4. Van zodra de hello.jsp-broncode is veranderd, en een request dit bestand opnieuw aanvraagt, dan zal Tomcat dit merken en hello_jsp.java en hello_jsp.class overschrijven met nieuwe versies.
Deel XIX Security, Servlets & authenticatie5 De plaats van servlets in een JSP- applicatie Als hulpmiddel om JSPs te kunnen gebruiken De gegenereerde _jsp.java-bestanden NIET manueel wijzigen! Als controller in een MVC-architectuur. Wij hebben bij de MVC-les een jsp gebruikt als controller. Normaal wordt een servlet gebruikt. N.B. servlets zijn ouder dan jsp’s.
Deel XIX Security, Servlets & authenticatie6 De Servlet-architectuur (GRATIS tool voor klassen- en packagediagrammen: Dit is je eigen servlet
Deel XIX Security, Servlets & authenticatie7 De Servlet-architectuur
Deel XIX Security, Servlets & authenticatie8 Een servlet laten draaien: VoorbeeldServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class VoorbeeldServlet extends HttpServlet { public void doGet(HttpServletRequest request, public void doGet(HttpServletRequest request, HttpServletResponse response) HttpServletResponse response) throws ServletException, IOException { throws ServletException, IOException { response.setContentType("text/html"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); PrintWriter out = response.getWriter(); out.println(" Servlet says Hello "); out.println(" Servlet says Hello "); out.close(); out.close(); } public void doPost(HttpServletRequest request, public void doPost(HttpServletRequest request, HttpServletResponse response) HttpServletResponse response) throws ServletException, IOException { throws ServletException, IOException { doGet(request, response); doGet(request, response); }}
Deel XIX Security, Servlets & authenticatie9 Een servlet laten draaien: web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" " " invoker invoker /servlet/* /servlet/* </web-app>
Deel XIX Security, Servlets & authenticatie10 Een servlet laten draaien Bewaar de broncode van VoorbeeldServlet.java in de map../webapps/hfdst19/WEB-INF/classes Compileer VoorbeeldServlet.java Bewaar het bestand web.xml in../webapps/hfdst19/WEB-INF Tomcat afsluiten en heropstrarten In Start/Run of in je browser tik je:
Deel XIX Security, Servlets & authenticatie11 Resultaat
Deel XIX Security, Servlets & authenticatie12 Authenticatie met servlets Gebruikersauthenticatie Betekent: controle of de gebruiker wel is wie hij beweert te zijn: iemand met bepaalde rechten. De servlet 2.3-specificatie voorziet: HTTP Basic HTTP Digest (niet behandeld, zoals HTTP Basic, maar veiliger) Form based HTTPS client (niet behandeld, gebruikt certificaten en de secure sockets layer)
Deel XIX Security, Servlets & authenticatie13 HTTP Basic Authenication Maakt gebruik van ingebouwd dialoogvenster Nodig: Een servlet Een goed ingevuld web.xml-bestand
Deel XIX Security, Servlets & authenticatie14 HTTP Basic: ProtectedServlet.java import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; import java.security.*; public class ProtectedServlet extends HttpServlet { public void init(ServletConfig cfg) throws ServletException public void init(ServletConfig cfg) throws ServletException { super.init(cfg); super.init(cfg); } public void doGet(HttpServletRequest req, HttpServletResponse res) public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException throws IOException, ServletException { res.setContentType("text/plain"); res.setContentType("text/plain"); PrintWriter out = res.getWriter(); PrintWriter out = res.getWriter(); String authType = req.getAuthType(); String authType = req.getAuthType(); out.println("U mag deze pagina bekijken"); out.println("U mag deze pagina bekijken"); out.println("De authenticatiemethode hier gebruikt is de " + authType + " authenticatiemethode"); out.println("De authenticatiemethode hier gebruikt is de " + authType + " authenticatiemethode"); Principal princ = req.getUserPrincipal(); Principal princ = req.getUserPrincipal(); out.println("De gebruiker is: " + princ.getName()); out.println("De gebruiker is: " + princ.getName()); }}
Deel XIX Security, Servlets & authenticatie15 HTTP Basic: web.xml protected protected ProtectedServlet ProtectedServlet <servlet-mapping> protected protected <url-pattern>/protected</url-pattern> Protected Area Protected Area <url-pattern>/protected</url-pattern></web-resource-collection><auth-constraint> begjsp3 begjsp3 </auth-constraint> <login-config> BASIC BASIC Dit is HTTP-Basic-authenticatie2 Dit is HTTP-Basic-authenticatie2 </login-config>
Deel XIX Security, Servlets & authenticatie16 HTTP Basic: tomcat-users.xml <tomcat-users> </tomcat-users>
Deel XIX Security, Servlets & authenticatie17 HTTP Basic: test Bewaar en compileer de broncode van ProtectedServlet.java in de map ProtectedServlet.java in de map…/webapps/hfdst19/WEB-INF/classes Overschrijf het bestand web.xml in …/webapps/hfdst19/WEB-INF Pas het bestand tomcat-users.xml aan in …/conf Tomcat afsluiten en heropstrarten In Start/Run of in je browser tik je:
Deel XIX Security, Servlets & authenticatie18 Resultaat
Deel XIX Security, Servlets & authenticatie19 Resultaat
Deel XIX Security, Servlets & authenticatie20 Form Based Authentication Nodig: Een klein bestand login.jsp, die aan bepaalde vormeisen voldoet. Een klein bestand error.jsp, die automatisch aangeroepen wordt bij inlogproblemen Een beschermd jsp-bestand. Een correct bestand web.xml
Deel XIX Security, Servlets & authenticatie21 Form Based: index.jsp <html> Beschermde pagina Beschermde pagina <% <% out.println(" Authenticatiemethode is " out.println(" Authenticatiemethode is " + request.getAuthType() + " "); + request.getAuthType() + " "); %> %> </html>
Deel XIX Security, Servlets & authenticatie22 Form-based: login.jsp <html> Inlogpagina Inlogpagina </html> VERPLICHT DEZE NAMEN
Deel XIX Security, Servlets & authenticatie23 Form Based: error.jsp <html> Foutpagina Foutpagina Inloggen mislukt. Inloggen mislukt. Ga naar de Ga naar de loginpagina(login.jdp) loginpagina(login.jdp) </html>
Deel XIX Security, Servlets & authenticatie24 Form Based: web.xml Protected Area Protected Area /* /* begjsp3 begjsp3 FORM FORM /login.jsp /login.jsp /error.jsp /error.jsp
Deel XIX Security, Servlets & authenticatie25 Form Based: test Overschrijf het bestand web.xml in …/webapps/hfdst19/WEB-INF Bewaar de jsp-bestanden op de normale plaats in …/webapps/hfdst19 Tomcat afsluiten en heropstrarten In Start/Run of in je browser tik je: OF
Deel XIX Security, Servlets & authenticatie26 Resultaat
Deel XIX Security, Servlets & authenticatie27 Hoe uitloggen ? Pas index.html aan <html> Beschermde pagina Beschermde pagina <% <% out.println(" Authenticatiemethode is " + request.getAuthType() + " "); out.println(" Authenticatiemethode is " + request.getAuthType() + " "); %> %> log out log out </html>
Deel XIX Security, Servlets & authenticatie28 Maak logout.jsp <html> <% <% session.invalidate(); session.invalidate(); %> %> </html>
Deel XIX Security, Servlets & authenticatie29 Hoe controleren of je echt uitgelogd bent ? Tik in: Of Je moet nu inloggen (login.jsp wordt getoond) Je geraakt binnen (je komt in index.jsp) Nu alle browservensters sluiten en opnieuw tikken: Je komt ineens in index.jsp, je bent nog steeds ingelogd !
Deel XIX Security, Servlets & authenticatie30 Hoe controleren of je echt uitgelogd bent ? (vervolg) Klik nu op logout Sluit all browservensters Tik: Je moet nu weer inloggen. Blijkbaar ben je effectief uitgelogd