Спаибо, tux, за совет я в принципе все так и делаю, вот давайте начем с первого пункта, в пример естественно я приведу упрошенный без использования БД, есть LoginSevlet, на котором юзеры логиняться, если логин удачный то они переходят к RootControllerServlet - сервлет контролер в MVC, т.к. реализована модель MVC, нужно чтобы фильтр (SessionFilter) при попытке вызвать из RootControllerServlet какую-нить jsp (например, showUserAccounts.jsp) проверял наличие сессии, что бы нельзя было обойти процесс логона и просто в браузере набрать http://localhost:8080/app1/jsp/showUserAccounts.jsp. Мне подсказывали как это сделать на других форумах, но что то пока без результатно, может Вы поможите, итак листинги:
LoginServlet:
| Код | import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.ServletException; import java.io.IOException; import java.io.PrintWriter;
public class LoginServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { sendLoginForm(response, false); }
private void sendLoginForm(HttpServletResponse response, boolean withErrorMessage) throws ServletException, IOException {
response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<HTML>"); out.println("<HEAD>"); out.println("<TITLE>Login</TITLE>"); out.println("</HEAD>"); out.println("<BODY>"); out.println("<CENTER>");
if (withErrorMessage) out.println("Login failed. Please try again.<BR>");
out.println("<BR>"); out.println("<BR><H2>Login Page</H2>"); out.println("<BR>"); out.println("<BR>Please enter your user name and password."); out.println("<BR>"); out.println("<BR><FORM METHOD=POST>"); out.println("<TABLE>"); out.println("<TR>"); out.println("<TD>User Name:</TD>"); out.println("<TD><INPUT TYPE=TEXT NAME=userName></TD>"); out.println("</TR>"); out.println("<TR>"); out.println("<TD>Password:</TD>"); out.println("<TD><INPUT TYPE=PASSWORD NAME=password></TD>"); out.println("</TR>"); out.println("<TR>"); out.println("<TD ALIGN=RIGHT COLSPAN=2>"); out.println("<INPUT TYPE=SUBMIT VALUE=Login></TD>"); out.println("</TR>"); out.println("</TABLE>"); out.println("</FORM>"); out.println("</CENTER>"); out.println("</BODY>"); out.println("</HTML>"); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("userName"); String password = request.getParameter("password");
if (login(userName, password)){
HttpSession session = request.getSession(true); session.setAttribute("loggedIn", new String("true")); response.sendRedirect("RootControllerServlet"); }else{ sendLoginForm(response, true); } } public Boolean login(String userName, String password){
if (userName.equals("1") && password.equals("1")){ return true; } else return false; }
|
RootControllerServlet:
| Код | import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import javax.servlet.ServletException; import javax.servlet.RequestDispatcher; import java.io.IOException;
public class RootControllerServlet extends HttpServlet {
public String loginUrl = "LoginServlet";
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{ HttpSession session = request.getSession(); if(session == null) response.sendRedirect(loginUrl); else{ String loggedIn = (String) session.getAttribute("loggedIn"); if (!loggedIn.equals("true")) response.sendRedirect(loginUrl); } } catch(NullPointerException e) {} doPost(request, response); }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String base = "/jsp/"; String url = base + "Default.jsp"; String action = request.getParameter("action"); if (action!=null) { if (action.equals("showUserAccounts") || (action.equals("deleteUserAccount"))) url = base + "showUserAccounts.jsp";
else if (action.equals("createNewUserAccount") || (action.equals("createUser"))) url = base + "createNewUserAccount.jsp";
else if (action.equals("logOff")) response.sendRedirect(loginUrl); }
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher(url); requestDispatcher.forward(request, response); } }
|
SessionFilter:
| Код | import java.io.*; import javax.servlet.*; import javax.servlet.Filter; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest;
public class SessionFilter implements Filter{ public String loginUrl = "LoginServlet"; private FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
ServletContext servletContext = filterConfig.getServletContext(); HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(); String loggedIn = (String) session.getAttribute("loggedIn");
if (!"true".equals(loggedIn)) { chain.doFilter(request, response); } else { ((HttpServletResponse) response).sendRedirect(loginUrl); } } public void destroy(){ this.filterConfig = null; } }
|
web.xml:
| Код | <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app>
<servlet> <servlet-name>LoginServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet>
<servlet> <servlet-name>RootControllerServlet</servlet-name> <servlet-class>RootControllerServlet</servlet-class>
<init-param> <param-name>base</param-name> <param-value>http://127.0.0.1:8080/test_f/RootControllerServlet</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping>
<servlet-mapping> <servlet-name>RootControllerServlet</servlet-name> <url-pattern>/RootControllerServlet</url-pattern> </servlet-mapping>
<filter> <filter-name>SessionFilter</filter-name> <filter-class>SessionFilter</filter-class> </filter>
<filter-mapping> <filter-name>SessionFilter</filter-name> <servlet-name>RootControllerServlet</servlet-name> </filter-mapping>
</web-app>
|
ну еще showUserAccounts.jsp:
| Код | <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head><title>showUserAccounts</title></head> <body>showUserAccounts</body> </html>
|
Не работает, к сожалению! Подскажите, что не так? |