JSP中的会话,带有Id或Username

时间:2011-06-15 19:04:49

标签: jsp session

在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);
     }
    %>

1 个答案:

答案 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 attacksprepared statements

最后,我错过了finally块,其中正确关闭了JDBC资源,以防止它们泄漏,这可能导致应用程序在数据库耗尽所有资源时长期崩溃。

相关问题