Правильный вход с использованием сервлетов, перенаправленных на URL - PullRequest
1 голос
/ 03 апреля 2012

Я использую Apache Tomcat и сервлет для проверки имени пользователя и пароля из базы данных MySQL.

Код 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> 

Код сервлета:

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 code:

<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

1 Ответ

2 голосов
/ 03 апреля 2012

На каждой странице вам нужно проверить, вошел ли пользователь в систему или нет. Вы можете сделать это, используя Session Management,

Самый простой способ - превратить все ваши HTML-страницы в jsp.

установить одну переменную в вашем сервлете

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

        }   

в вашем jsps проверьте это.

<c:if test="${sessionScope.userSession=='loggedin'}">
//rest of the code
<c:else>
//redirect to login
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...