2014-12-03 72 views
0

“字符串文字未正确关闭的双引号”无法找到双引号来关闭字符串

我遇到了上述问题。我已经通过我的代码搜索了高和低,我仍然无法识别错误。它说,错误是在第12行

这里是我的代码中发现: http://pastebin.com/WgD3ApR0

我在JSP编码。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 

<html> 
    <head> 
    <title></title> 
    </head> 
    <body> 

    <%@ page import="java.sql.*"%> 
    <%@ page import="java.util.*"%> 

    <% 
    response.addHeader("Cache-Control","no-cache"); 
    response.addHeader("Pragma","no-cache"); 
    response.addHeader("Expires","0"); 

    // Login variables //  
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 

// SQL login variables // 

// Role variables // 

// Encryption of session ID // 
    String sessId = "" + (new java.util.Random()).nextInt(1000);  

    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    String conURL= "jdbc:odbc:HOD_DATA"; 
    Connection con = DriverManager.getConnection(conURL); 
    Statement st = con.createStatement(); 
    String query = "select user_group from login 
        where username = '"+username+"' 
        and password = '"+password+"' 
        "; 

    ResultSet rs = st.executeQuery(query); 
    Boolean result = rs.next(); 

    // Might have to pass the login details over to the other pages // 

    if(result == true){ 

    // Ashton // 
    if(rs.getString("user_group").equals("admin")){ 
    String url = response.encodeURL("Test.jsp?sessId=" + sessId); 
    response.sendRedirect(url); 
    } 

    // Joseph // 
    else if(rs.getString("user_group").equals("clerk")){ 
    String url = response.encodeURL("ClerkPage.jsp?sessId=" + sessId); 
    response.sendRedirect(url); 
    } 

    // Gaurav // 
    else if(rs.getString("user_group").equals("customer")){ 
    String url = response.encodeURL("HomePage.jsp?sessId=" + sessId); 
    response.sendRedirect(url); 
    } 

    // Jiong xu // 
    else if(rs.getString("user_group").equals("sales")){ 
    String url = response.encodeURL("SalesPage.jsp?sessId=" + sessId); 
    response.sendRedirect(url); 
    } 

    // Wen jie // 
    else if(rs.getString("user_group").equals("operations")){ 
    String url = response.encodeURL("OperationsPage.jsp?sessId=" + sessId); 
    response.sendRedirect(url); 
    }  
    } 

    else { 
    response.sendRedirect("LoginPage.jsp"); // If the above fails, redirect to login // 
    } 

    rs.close(); 
    st.close(); 
    con.close(); 

    %> 

    </body> 
</html> 
+2

你相信'SQL注入'吗? – 2014-12-03 12:59:11

回答

3

这很可能是这一部分:

String query = "select user_group from login 
            where username = '"+username+"' 
            and password = '"+password+"' 
            "; 

换行符没有在Java中的字符串的中间不允许的。

2

第一您的运行查询的方式是有点太旧,太危险了,这是更好,如果你使用的是例如postgresql数据库在这里使用prepared statements,这样

PreparedStatement st = con.prepareStatement("select user_group from login where username=? and password=?"); 
st.setString(1,username); 
st.setString(2,password); 
ResultSet rs = st.executeQuery(); 

其次,它更好地利用其自己的隐式驱动程序,而不是它的ODBC驱动程序以获得更好的性能。

+0

我相信我的学校还在教我们老教学大纲。感谢您向我强调更现代的做法的事情:)我会记住这一点 – hahaashton 2014-12-03 13:26:40