在jsp Login或Session()中,最好在会话中放入用户名或Id ??
我是在servlet上还是在外部jsp页面上进行测试?
我在外部jsp页面中使用此代码,但我认为不安全
<%if(session.getAttribute("username") == null){%>
<%
String err ;
Connection cnn;
Class.forName(System.getProperty("database.driver","com.mysql.jdbc.Driver"));
cnn = DriverManager.getConnection("jdbc:mysql://localhost:3306/sondage","root", "");
Statement stat1 = cnn.createStatement();
String Username,Password;
Username=request.getParameter("UserName");
Password=request.getParameter("passWord");
//Le nomre de produits
ResultSet resultat = stat1.executeQuery("select * from utilisateur where username ='"+ Username +"' and password = '"+Password+"'");
if (resultat.next()) {
session.putValue("username",Username);
RequestDispatcher rd =request.getRequestDispatcher("vote.jsp");
rd.forward(request, response);
}
else {
RequestDispatcher rd =request.getRequestDispatcher("authentification.jsp?err=1");
rd.forward(request, response);
}
%>
答案 0 :(得分:2)
这完全取决于你。我个人只是在其中放置一个代表User
实体的Javabean,以便我可以即时访问其所有属性,我通常在servlet中执行此操作。
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userDAO.find(username, password);
if (user != null) {
request.getSession().setAttribute("user", user);
response.sendRedirect("userhome");
} else {
request.setAttribute("message", "Unknown login, try again");
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}
}
只有几件事情像怪异/不安全一样出现:
<%if(session.getAttribute("username") == null){%>
为什么要检查?是否允许用户重新登录为另一个用户?你应该为此使用Filter
。
ResultSet resultat = stat1.executeQuery("select * from utilisateur where username ='"+ Username +"' and password = '"+Password+"'");
这是一个SQL injection洞。请继续阅读SQL injection attacks和prepared statements。
最后,我错过了finally
块,其中正确关闭了JDBC资源,以防止它们泄漏,这可能导致应用程序在数据库耗尽所有资源时长期崩溃。