Я разработал приложение с использованием Spring-MVC и Hibernate, который имеет страницу регистрации.Когда пользователь пытается зарегистрироваться, приложение отправляет OTP на почту пользователя, и я сохранил этот OTP, отправленный приложением в классе контроллера, как глобальную переменную.Таким образом, здесь проблема в том, что когда два пользователя обращаются одновременно, последний запрошенный пользователь переопределяет старого, и из-за этого первый пользователь не может зарегистрироваться.
1> Поддерживает ли Spring отдельный сеанс для каждого пользователя?доступ к приложению?Если нет? Как решить эту проблему?.
Пожалуйста, найдите ниже код.
контроллер класса:
package com.uday;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import javax.mail.MessagingException;
import javax.mail.internet.AddressException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ControllerSignUp_Login {
private final Login_DetailsDao dao;
private Login_Details ld = new Login_Details();
private String OtpMailed = "";
private MailSendTest mailSender;
private int chances = 4;
private String emailAdd;
public ControllerSignUp_Login(Login_DetailsDao login_DetailsDao, MailSendTest mailSender) {
this.dao = login_DetailsDao;
this.mailSender = mailSender;
}
@RequestMapping("/hello")
@Transactional
public String diaplay(@RequestParam("name") String name, @RequestParam("pass") String pass, Model m) {
if (dao.isLogoinSuccessfull(name, pass)) {
m.addAttribute("message", "Hello " + name + " You are successfully logged in");
return "Success";
} else {
m.addAttribute("message", "Cannot validate given details.Please try again");
return "login";
}
}
@RequestMapping("/SignUp")
public String redirect() {
System.out.println("ControllerSignUp_Login.display()");
chances = 4;
return "signup";
}
@RequestMapping("/login")
public String display() {
System.out.println("ControllerSignUp_Login.display()");
return "login";
}
@RequestMapping("/updateDetails")
@Transactional
public String display(HttpServletRequest req, Model M) {
String firstName = req.getParameter("firstName");
String lastName = req.getParameter("lastName");
String mobileNo = req.getParameter("mobileNo");
String address = req.getParameter("address");
String email = req.getParameter("email");
String password = req.getParameter("password");
if (checkLength(firstName) && checkLength(lastName) && checkLength(mobileNo) && checkLength(address)
&& checkLength(email) && checkLength(password)) {
ld.setFirstName(firstName);
ld.setLastName(lastName);
ld.setEmail(email);
ld.setAddress(address);
ld.setMobileNo(mobileNo);
ld.setPassword(password);
if (dao.validateMobileAndEmail(mobileNo, email)) {
doSendEmail(email);
M.addAttribute("cMessage", false);
return "ValidationPage";
} else {
M.addAttribute("message", "MobileNo/Email is already registered");
return "signup";
}
} else {
M.addAttribute("message", "SignUp Failed !! All details are mandatory.");
return "signup";
}
}
@RequestMapping("/Home")
public String displayy() {
return "Home";
}
@RequestMapping("/")
public String display1() {
return "login";
}
public boolean checkLength(String s) {
if (s != null && s.length() > 0) {
return true;
}
return false;
}
@Transactional
@RequestMapping("/submitToDB")
public String submitToDataBase(HttpServletRequest req, Model M) {
String otp = req.getParameter("otp");
System.out.println("ControllerSignUp_Login.submitToDataBase()" + otp);
if (OtpMailed.equals(otp)) {
dao.saveEmployee(ld);
chances = 4;
M.addAttribute("message", "SignUp Successfull !! Thank You");
M.addAttribute("displayLogin", true);
return "Success";
} else {
if (chances != 1) {
chances = chances - 1;
M.addAttribute("message", chances + " Chances Left");
return "ValidationPage";
} else {
chances = 4;
M.addAttribute("message", "Authorization failed");
return "signup";
}
}
}
@RequestMapping("/validate")
public String validateOtp() {
return "Success";
}
public String generateOtp() {
String otp = "";
for (int i = 0; i < 4; i++) {
Double d = Math.ceil(Math.random() * 10);
int value = d.intValue();
if (value == 10) {
otp = otp + 1;
} else {
otp = otp + value;
}
}
return otp;
}
public void doSendEmail(String mail) {
try {
this.emailAdd = mail;
String recipientAddress = mail;
String subject = "One Time Verification <Uday>";
String otpGenerated = generateOtp();
this.OtpMailed = otpGenerated;
String message = "Please use this OTP " + otpGenerated + " to signup. ";
mailSender.Send("xxxxxxxxx@gmail.com", "lxrxnxnhmyclvzxs", recipientAddress, subject, message);
} catch (AddressException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@RequestMapping("/resend")
public String resend(Model m) {
doSendEmail(this.emailAdd);
m.addAttribute("message", chances + " Chances Left");
return "ValidationPage";
}
}