首页 > 解决方案 > 在 SPRING MVC 中生成 OTP

问题描述

我正在开发一个银行应用程序,如果用户忘记了 ID,我想生成 OTP。我试图在 OTP 成功的控制器类中设置请求映射,但它显示错误。这是我的代码我想生成一些随机的方式

@RequestMapping(value = "/otpSuccess", method = RequestMethod.GET)
    public void send(HttpServletRequest req) throws Exception {
        String numbers = "0123456789";
        String acn=req.getParameter("acc");
        Random rndm_method = new Random(); 
          char[] otp = new char[6];
            for (int i = 0; i < 6; i++) 
            { 
               otp[i]=numbers.charAt(rndm_method.nextInt(numbers.length()));
            }
            Session session=this.sessionFactory.openSession();
            Query q=session.createQuery("select email from Student where accno=:n");
            q.setParameter("n", acn);
            List<String>  l=q.list();
            String  body=otp.toString();
            String host="smtp.gmail.com";  
           final String user="codingbloke90@gmail.com";  
           final String password="XXXXXXXX";  //My mail's password

      String to=l.get(0);

       //Get the session object  
       Properties props = new Properties();  
       props.put("mail.smtp.host",host);  
       props.put("mail.smtp.auth", "true");  
       //below is mycom.infotech.controller.FundController.send(FundController.java:111) actual line which is showing error 
       javax.mail.Session session1 =  javax.mail.Session.getDefaultInstance(props,  
        new javax.mail.Authenticator() {  
          protected PasswordAuthentication getPasswordAuthentication() {  
        return new PasswordAuthentication(user,password);  
          }  
        });  

       //Compose the message  
        try {  

         MimeMessage message = new MimeMessage(session1);  
         message.setFrom(new InternetAddress(user));  
         message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));  
         message.setSubject("Verification");  
         message.setText(body);  

        //send the message  
         Transport.send(message);  

         System.out.println("message sent successfully...");  

         } catch (Exception e) {e.printStackTrace();}  


 }  
}

我得到的错误是

HTTP Status 500 – Internal Server Error
Type Exception Report

Message Request processing failed; nested exception is java.lang.IndexOutOfBoundsException: Index 0 out-of-bounds for length 0

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IndexOutOfBoundsException: Index 0 out-of-bounds for length 0
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.IndexOutOfBoundsException: Index 0 out-of-bounds for length 0
    java.base/jdk.internal.util.Preconditions.outOfBounds(Unknown Source)
    java.base/jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Unknown Source)
    java.base/jdk.internal.util.Preconditions.checkIndex(Unknown Source)
    java.base/java.util.Objects.checkIndex(Unknown Source)
    java.base/java.util.ArrayList.get(Unknown Source)
    com.infotech.controller.FundController.send(FundController.java:111)
    java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    java.base/java.lang.reflect.Method.invoke(Unknown Source)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.

Apache Tomcat/9.0.21

有人可以建议我对 OTP 格式的任何更改或应该在其他地方使用 OTP 生成吗。它在第 111 行显示错误,我在评论中显示了该错误,并在此处提到了错误(第 111 行)代码部分

javax.mail.Session session = javax.mail.Session.getInstance(props,
          new javax.mail.Authenticator() {
             protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
             }
          }); 

标签: hibernatespring-mvcone-time-password

解决方案


推荐阅读