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 :
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);
	}
Problèmes :

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 :
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();
		}	
	}
et l'exception retourné :
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)
Voyez vous des éléments susceptible d'être responsable de mes problèmes ?