В webapp, над которым я работаю, работает JSP и JAVA на сервере Tomcat. Как можно разрешить только каждому пользователю иметь только один сеанс за раз, то есть не позволять любому пользователю подписываться более чем на одном или другом компьютере или браузере.Разрешить каждому пользователю иметь один сеанс
сторона JSP-клиент:
<input type="text" name="uname" placeholder="Username"> <br>
<input type="password" name="pwd" placeholder="Password"> <br>
<input type="submit" value="Login">
<% String fail = request.getParameter("loginFailed");
if(fail != null && fail.equals("yes"))
{
out.println("<br><font color=\"red\"> Login failed</font>");
}
else if(request.getParameter("loggedOut") != null)
{
out.println("<br><font color=\"red\">You have been logged out.</font>");
}
%>
JAVA Часть:
public class login extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public login() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String[] uname = request.getParameterValues("uname");
String[] pass = request.getParameterValues("pwd");
if(uname.length == 0 || pass.length == 0)
{
response.sendRedirect("/MASC/index.jsp?loginFailed=yes");
return;
}
UsersDB authdb = new UsersDB();
User authUser = null;
try {
authUser = authdb.auth(uname[0], pass[0]);
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(authUser == null)
{
response.getWriter().append("not authenitacted");
Cookie authCookie = new Cookie("auth", "no");
response.addCookie(authCookie);
response.sendRedirect("/MASC/index.jsp?loginFailed=yes");
}
else
{
System.out.println("auth session " + authUser);
HttpSession session = request.getSession();
session.setAttribute("uid", authUser.getUid());
session.setAttribute("level", authUser.getLevel());
session.setAttribute("aeid", authUser.getAeid());
session.setMaxInactiveInterval(15*60);
response.sendRedirect("/MASC/welcome.jsp");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
Есть ли способ хранить зарегистрированных пользователей, или создать новый столбец в базе данных «LoggedIn» и проверка для этого столбца, прежде чем разрешить пользователю входить в систему? Или есть более эффективный способ реализовать это?
Если вы решите использовать функцию весны, у нее есть функция, называемая контролем параллелизма, которая контролирует количество одновременных сеансов, которые пользователь может иметь. – user2953113