2012-04-03 25 views
1

我使用Apache Tomcat和一个servlet从MySQL数据库查询用户名和密码正确使用登录servlet的重定向到URL

HTML网页代码:

<form action="./login" method="POST"> 
    User name: <input type="text" name="username" size="20"><br> 
    Password: <input type="password" name="pwd" size="20"> 
    <br><br> 
    <input type="submit" value="Submit"> 
</form> 

servlet代码:

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 
import java.io.*; 
public class VerifyLogin extends HttpServlet 
{ 
    public void doGet(HttpServletRequest req,HttpServletResponse res)throws IOException,ServletException 
    { 
     String n1 = req.getParameter("username"); 
     String n2 = req.getParameter("pwd"); 
     res.setContentType("text/html"); 
     PrintWriter out = res.getWriter(); 

     try 
    { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","paSSword"); 
     PreparedStatement ps = con.prepareStatement("select * from auth WHERE username=? && password=?"); 
     ps.setString(1,n1); 
     ps.setString(2,n2); 
     ResultSet rs = ps.executeQuery(); 


     if(rs.next()) 
     { 
      res.sendRedirect("report.html"); 

     } 
     else 
     { 
      res.sendRedirect("Invalid.html"); 
     } 

    } 
     catch (Exception e) 
     { 
     System.out.println(e); 
     } 

    } 
} 

web.xml代码:

<web-app> 
    <servlet> 
     <servlet-name>Login</servlet-name> 
     <servlet-class>VerifyLogin</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Login</servlet-name> 
     <url-pattern>/login</url-pattern> 
    </servlet-mapping> 
</web-app> 

我的目录结构是

=============>tomcat 
       +webapps 
       +myapp 
        + 
        +report.html 
        +report2.html 
        +xxxx.html 
        +WEB-INF 
         +classes 
         +lib 
         +web.xml 

我是能够成功地验证和用户重定向到所需的页面(report.hmtl),问题是当用户复制登录后的地址说http://192.168.2.2:8080/myapp/Reports.html,并在另一个浏览器粘贴地址他不会被要求登录。

report.html有更多的链接,如果有人知道链接,可以在不登录的情况下访问它。所有的.html页面都放在WEB-INF文件夹之外如何保护那些来自直接访问的示例(例如report2.html,xxx.html)?而无需将html页面转换为jsp

回答

2

在每个页面中,您需要检查是否有用户登录。你可以通过使用Session Management,

最简单的方法是使所有的HTML页面转换成jsp的。

设置一个变量在你的servlet

if(rs.next()) 
     { 
      res.sendRedirect("report.html"); 
      session.setAttribute("userSession", "loggedin"); 

     } 

在JSP检查。

<c:if test="${sessionScope.userSession=='loggedin'}"> 
//rest of the code 
<c:else> 
//redirect to login 
+0

thnaks for reply,can not it be done without without html to jsp ?? PS:忘记提及它的问题 – 2012-04-03 14:40:43

+0

不,不能在HTML中检查会话,并且在转换为jsp时没有问题... – 2012-04-03 14:45:43

+0

我的问题是,我在WEB-INF文件夹外有56个HTML页面,有没有什么办法我可以自动将它们转换成批次吗? – 2012-04-03 15:00:28