J'ai pensé à realiser mes authorisations d'accès à l'aide d'un filtre de Servlet, qui pour chaque requète va analyser l'URI demandé et comparé avec celle qui lui sont authorisé en fonction de ses droits.
Voici mon filtre :
Problèmes :
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 public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { System.out.println("Youhou"); boolean status; /*On verifie que l'user est authentifié (presence de son objet en Session)*/ HttpSession session = ((HttpServletRequest) req).getSession(false); if (session == null || session.getAttribute("personne") == null); envoiErreur.sendLoginError((HttpServletRequest)req,(HttpServletResponse)res,EnvoiErreur.SESSION_ERROR); /*On recupère l'URI demandé*/ String URI = ((HttpServletRequest)req).getRequestURI(); //On teste si la variable personne qui doit être ds la session est un User ou un Admin if(session.getAttribute("personne") instanceof User){ //Verifier si dans pages autorisé a User status = isUserPage(URI); if (!status) envoiErreur.sendLoginError((HttpServletRequest)req,(HttpServletResponse)res,EnvoiErreur.INSCR_ERROR); } else if (session.getAttribute("personne") instanceof Admin) { //Verifier si dans pages autorisé à Admin status = isAdminPage(URI); if (!status) envoiErreur.sendLoginError((HttpServletRequest)req,(HttpServletResponse)res,EnvoiErreur.INSCR_ERROR); } chain.doFilter(req,res); }
en cas de reussite, la page demandé n'est jamais renvoyé, pourtant j'effectue bien le chain.doFilter() en fin de traitement ...
en cas d'erreur, j'ai créer une classe envoiErreur qui est censé renvoyé une page d'erreur à l'utilisateur, mais cela ne marche pas et cela se fini en IllegalStateException ...
La fonction de renvoi d'erreur :
et l'exception retourné :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 void sendLoginError(HttpServletRequest req, HttpServletResponse res, String errorType){ HttpSession s = req.getSession(); s.setAttribute("errorMessage",errorType); try { res.sendRedirect(res.encodeRedirectURL("pages/login.html")); } catch (IOException e) { e.printStackTrace(); } }
Voyez vous des éléments susceptible d'être responsable de mes problèmes ?
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 java.lang.IllegalStateException at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:432) at controleur.EnvoiErreur.sendLoginError(EnvoiErreur.java:30) at controleur.ProtectAccess.doFilter(ProtectAccess.java:88) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source)
Partager