Bonjour à tous.
J'ai actuellement un problème avec mon projet sous glassfish et j'ai besoin de votre aide .
Je m'explique: Quand j'essaye de me connecter via un formulaire jsp, j'ai une erreur http 500 et l'erreur suivante qui apparaît dans le log de glassfish:
Une ligne attire mon attention, celle de ma(mon ) servlet LoginServlet. Je décide donc de voir ce qui cloche mais tout m'a l'air d'être normal. Je regarde donc la ligne qui semble poser problème:
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
31
32 Avertissement: StandardWrapperValve[LoginServlet]: PWC1406: Servlet.service() for servlet LoginServlet threw exception java.lang.NullPointerException at com.google.common.hash.MessageDigestHashFunction$MessageDigestHasher.putString(MessageDigestHashFunction.java:144) at com.supinfo.supinbank.servlet.LoginServlet.doPost(LoginServlet.java:54) at javax.servlet.http.HttpServlet.service(HttpServlet.java:754) at javax.servlet.http.HttpServlet.service(HttpServlet.java:847) at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1539) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98) at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162) at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:330) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:174) at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:828) at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:725) at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1019) at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225) at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) at com.sun.grizzly.ContextTask.run(ContextTask.java:71) at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) at java.lang.Thread.run(Thread.java:722)
Voici le code de LoginServlet (je précise que j'utilise une librairie nommée guava):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 HashCode hc = hf.newHasher().putString(password).hash();
Au cas où, je laisse le code la jsp que j'utilise pour ma connexion:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61@WebServlet(name = "LoginServlet", urlPatterns = {"/login"}) public class LoginServlet extends HttpServlet { @EJB private PersonDao personDao; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("index.jsp").forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { final String email = request.getParameter("email"); final String password = request.getParameter("password"); HashFunction hf = Hashing.sha1(); HashCode hc = hf.newHasher() .putString(password) .hash(); final String hashedPassword = hc.toString(); final Person p = personDao.findUserByMail(email); if (p == null) { doGet(request, response); } else { if (p.getPassword().equals(hashedPassword)) { final HttpSession session = request.getSession(); session.setAttribute("user", String.format("%s %s", p.getFirstName(), p.getLastName())); if (p.getRole() == UserRole.Advisor) { session.setAttribute("role", "advisor"); response.sendRedirect(getServletContext().getContextPath() + "/auth/admin/advisor"); } else { session.setAttribute("role", "customer"); session.setAttribute("customer", p); response.sendRedirect(getServletContext().getContextPath() + "/auth/customer"); } } else { doGet(request, response); } } } @Override public String getServletInfo() { return "Short description"; }// </editor-fold> }
J'aimerais que vous m'éclairiez parce que je suis perdu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 <body> <c:url value="/login" var="loginUrl" /> <form method="POST" action="${loginUrl}" style="padding-top:10px; padding-bottom: -15px;"> <input type="email" name="email" placeholder="Email" required /> <input type="password" name=password" placeholder="Password" required /> <input type="submit" value="Login" class="btn-success" /> </form> </body>
Merci d'avance à tous
Partager