Я разрабатываю аутентификацию для входа в систему с использованием jsp / servlets и glassfish v3.
В основном страница JSP имеет форму, которая вызывает сервлет. Затем сервлет проверяет имя пользователя и пароль из базы данных и будет аутентифицироваться на основании этого.
Я не обладаю достаточным опытом в вопросах безопасности, касающихся аутентификации пользователей (впервые я создаю один с использованием сервлетов), и у меня есть некоторые проблемы, которыми я хотел бы поделиться:
- «Форма» вызывает сервлет: / auth.
Если все в порядке после того, как сервлет обработает информацию, он будет перенаправлен на страницу jsp. Однако я заметил, что могу поместить URL-адрес, указывающий на сервлет в браузере, например: localhost: 8080 / myapp / auth , и он будет перенаправлен на страницу jsp, даже не авторизовавшись при входе в систему. механизм.
Я написал некоторые условия if / else в сервлете, чтобы предотвратить это в случае, если имя пользователя / пароль не были найдены действительными. Однако я уверен, что есть лучший и профессиональный способ сделать это, кто-нибудь может помочь с этим?
- И так, можно ли отключить просмотр прямо в сервлете браузера? например, если пользователь вводит в поле URL браузера: localhost: 8080 / myapp / auth , я хочу, чтобы ему было отказано в доступе. Можно ли это сделать?
- Кроме того, при использовании: getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/something.jsp").forward(request, response);
Форвард отображает имя моего сервлета в пути URL, то есть если я был по адресу: localhost: 8080 / myapp / , после этого форварда я получаю: localhost: 8080 / myapp / auth, Можно ли не отображать часть "auth" в URL после этой пересылки?
КОД:
HTML-форма
<form action= "auth" method = "POST">
<tr>
<td>Enter your name :</td>
<td><input type = "text" name = "username"></td>
</tr><br>
<tr>
<td>Enter your password :</td>
<td><input type = "password" name = "password"></td>
</tr><br>
<tr>
<td><input type = "submit" name = "submit" "></td>
</tr>
</form>
Функция processRequest моего "auth" сервлета:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try {
//Instantiate login Command
String cmdPath = "DomainLogic.Commands.login";
user usr = (user) cmdFactory.getInstance().getCommand(cmdPath).execute();
if(usr!=null && usr.isLoggedIn())
{
request.getSession(false).setAttribute("ok", usr);
getServletConfig().getServletContext().getRequestDispatcher("/WEB-INF/main.jsp").forward(request, response);
}
else
response.sendRedirect("/index.jsp");
} finally {}
}
мой сервлет "auth" в web.xml
<servlet>
<servlet-name>auth</servlet-name>
<servlet-class>bridge.auth</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>auth</servlet-name>
<url-pattern>/auth</url-pattern>
</servlet-mapping>