powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна помощь по фильтру...
25 сообщений из 37, страница 1 из 2
Нужна помощь по фильтру...
    #33948541
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, как должен выглядеть (лучше кодом) фильтр, который проверяет наличие сессии. То есть есть LoginServlet:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 public   void  doPost(HttpServletRequest request,
  HttpServletResponse response)
   throws  ServletException, IOException {
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    GetUserRole(userName, password);
     if  (userRole ==  null ){
        sendLoginForm(response, true);
         }
     else   if  (userRole.equals("superuser")) {
       HttpSession session = request.getSession(true);
       session.setAttribute("loggedIn",  new  String("true"));
       response.sendRedirect("RootControllerServlet");
}

LoginServlet при удачном логине передает RootControllerServlet сессию.
RootControllerServlet:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
  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";
                 }
                 RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher(url);
           requestDispatcher.forward(request, response);

Реализована модель MVC, нужно чтобы фильтр при попытке вызвать из RootControllerServlet какую-нить jsp (например, showUserAccounts.jsp) проверял наличие сессии, что бы нельзя было обойти процесс логона и просто в браузере набрать http://localhost:8080/app1/jsp/showUserAccounts.jsp

Заранее всем спасибо.
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33948853
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
        HttpSession session = request.getSession(true);
        String loggedIn = (String) session.getAttribute("loggedIn");
         if  (!loggedIn.equals("true")) response.sendRedirect(loginUrl);
        chain.doFilter(req, resp);

это в doFilter(). фильтр мапится на тот же урл, что и контроллер.
пишите названия страниц, методов с маленькой буквы - потом проще будет.
в catch пишите e.printStackTrace().
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33949487
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deady спасибо за помощь, но вроде что то не так, у меня получился фильтр SessionFilter:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
 import  java.io.*;
 import  javax.servlet.*;
 import  javax.servlet.Filter;
 import  javax.servlet.FilterConfig;
 import  javax.servlet.ServletException;
 import  javax.servlet.http.HttpSession;

 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();

        HttpSession session = request.getSession(true);
        String loggedIn = (String) session.getAttribute("loggedIn");
         if  (!loggedIn.equals("true")) response.sendRedirect(loginUrl);
        chain.doFilter(request, response);

    }
идея подсвечивает
Код: plaintext
HttpSession session = request.getSession(true);
- типа сannot resolve metod getSession(boolean) и подсвечивает
Код: plaintext
 response.sendRedirect(loginUrl);
- типа сannot resolve metod sendRedirect

кусочек из web.xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<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>
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33949513
Фотография fleh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HttpSession session = (HttpSession) request.getSession(true);
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33949520
Фотография fleh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
((HttpServletResponse) response).sendRedirect(loginUrl);
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33949523
Фотография fleh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и - не лучше ли классы в пакеты класть?
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33949550
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HttpSession session = (HttpSession) request.getSession(true);
Не помогает....
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33950087
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, неужели никто не знает, как написать этот несчастный фильтр?
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33950179
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что еще не так-то? вроде все уже подсказали
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33950295
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. выше, ошибочки есть
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33950344
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fidelHttpSession session = (HttpSession) request.getSession(true);
Не помогает....

в чем не помогает?
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33950399
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея подсвечивает

Код: plaintext
HttpSession session = request.getSession(true);
- типа сannot resolve metod getSession(boolean) и подсвечивает

Код: plaintext
 response.sendRedirect(loginUrl);
- типа сannot resolve metod sendRedirect
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33950419
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fidelИдея подсвечивает

Код: plaintext
HttpSession session = request.getSession(true);
- типа сannot resolve metod getSession(boolean) и подсвечивает

Код: plaintext
 response.sendRedirect(loginUrl);
- типа сannot resolve metod sendRedirect

сказали же, что request из параметров метода надо привести к типу HttpServletRequest:
Код: plaintext
1.
2.
HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession(true);
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33954690
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Deady, спасибо за помощь, но че то я не догоняю, сделал как Вы сказали, а
он не работает.

SessionFilter:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
  public   void  doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)  throws  ServletException, IOException {

        ServletContext servletContext = filterConfig.getServletContext();

       
        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession(true);


        String loggedIn = (String) session.getAttribute("loggedIn");
         if  (!loggedIn.equals("true"))
     
        ((HttpServletResponse) response).sendRedirect(loginUrl);
        chain.doFilter(request, response);
   }

P.S. Простите за надоедливость и пытливость, прошерстил много форумов, но подобную тему так и не встретил.
Ну что же здесь не так?
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33954774
ifconfig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а кто на null проверять будет session.getAttribute("loggedIn") ?
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33954965
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за подсказку, добавил обработку NullPointerException тока так и не работает этот фильтр...уж сто раз теорию перечитал, вот не могу втыкнуть и все!
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33957632
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  public   void  doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)  throws  ServletException, IOException {

        ServletContext servletContext = filterConfig.getServletContext();

       
        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession(true);


        String loggedIn = (String) session.getAttribute("loggedIn");
         if  (!loggedIn.equals("true")) {
             ((HttpServletResponse) response).sendRedirect(loginUrl);
        }
         else  {
             chain.doFilter(request, response);
        }
   }
sendRedirect() только вставляет в выходной поток строку Location: ... и далее по вашему коду вызывается метод doFilter(), чего делать не надо.
добавьте else как в примере выше
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33958076
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опять не работает! Хорошо я пошел уже по более простому пути урезал все листинги итак:
LoginServlet:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
 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:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
 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:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
 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 {
 try {
        ServletContext servletContext = filterConfig.getServletContext();
        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession(true);
        String loggedIn = (String) session.getAttribute("loggedIn");

         if  (!loggedIn.equals("true")) {
             ((HttpServletResponse) response).sendRedirect(loginUrl);
        }
         else  {
             chain.doFilter(request, response);
        }
     } catch (NullPointerException e){
            e.toString();
        }
      }
     public   void  destroy(){
         this .filterConfig =  null ;
    }
}
web.xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
<?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>
ну и createNewUserAccount.jsp:
Код: plaintext
1.
2.
3.
4.
5.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head><title>createNewUserAccount</title></head>
  <body>createNewUserAccount</body>
</html>
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33958620
maddcast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
напиши getSession() вместо getSession(true)
и учи debug!
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33958767
парабелум
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что такое debug?
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33958824
Фотография Pitbull terrier
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 fidel

в последнем листинге фильтра - не надо кетчить NullPointerException, по крайней мере не так, как у вас - так точно работать не буде.
надо либо проверять на null, либо сделать проще:

Код: plaintext
1.
 if  (!"true".equals(loggedIn))

Dmitriy O "Итак вред от арабов (черных мусульман)
- Присутсвовали в татаро-монгольском иге"
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33958892
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зачем вам такая конструкция в принципе? я не понимаю суть сервлета RootControllerServlet. вы хотите FrameWork создать? не проще ли взять готовый?

делайте так:
каталог /
- форма аутентификации (login.jsp)
- общие файлы, которые мжно смотреть всем (типа /index.jsp итп)

каталог /private
- защищенные страницы
- страница success.jsp - на нее попадет пользователь в случае успешной аутентификации

сервлет LoginServlet. маппим его на /login.do
фильтр PrivateFilter. маппим его на /private/*

пишем на бумажке: "сервлет делает действие" (в частности, обработка формы) и вешаем на монитор.

в login.jsp в форме пишем
Код: plaintext
1.
2.
3.
4.
<form action="/login.do">
<input type="text" name="<%= LoginServlet.LOGIN_PARAMETER %>" />
<input type="pasword" name="<%= LoginServlet.PASSWORD_PARAMETER %>" />
</form>
заметили, что action формы указывает на login.do? то есть фактически на сервлет LoginServlet.
далее в LoginServlet пишем (в методе doGet или doPost - неважно, зависит от того, что указано в атрибуте method тега form):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 public   class  LoginServlet  extends  HttpServlet{

   public   static   final  String USER_KEY = "user";
   public   static   final  String LOGIN_PARAMETER = "login";
   public   static   final  String PASSWORD_PARAMETER = "pass";

   public   void  doGet(HttpServletRequest request, HttpServletResponse response)
         throws  ServletException, IOException {
      String login = request.getParameter(LOGIN_PARAMETER);
      String password = request.getParameter(PASSWORD_PARAMETER);
      UserManager manager = ...;// это класс, который умеет аутентифицировать пользователей
      User user = manager.findUser(login, password); //User - это класс, содержащий данные о пользователе
       if  (user!= null ) {
            request.getSession().setAttribute(USER_KEY, user);
            response.sendRedirect("/private/success.jsp");
      }
       else  {
            response.sendRedirect("/login.jsp");
      }
  }

}

видим, что сервлет при успешной аутентификации положит в сессию объект User. соответственно по этому атрибуту мы и узнаем, аутентифицирован он или нет в фильтре (помним, что фильтр замапен на /private/*):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
     public   void  doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)  throws  ServletException, IOException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession(true);
        User user = session.getAttribute(LoginServlet.USER_KEY);

         if  (user== null ) {
             ((HttpServletResponse) response).sendRedirect("/login.jsp");
        }
         else  {
             chain.doFilter(request, response);
        }
   }


вот и все.
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33961341
fidle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Deady: Смысл в том, что перед мной стоит задача написать веб-приложение, в котором необходимо логиниться. Есть три типа доступа: root, power_user, user - соответственно я хотел зделать так: залогинился root - идет пернаправление на RootControllerServlet (роль этого сервлета - сервлет контроля MVC), залогинился power-user идет перенаправление на PowerUserControllerServlet соответственно он тоже выполняет роль сервлета MVC.

Но шас я понимаю что эта модель - не гибкая и мертвая. В идеале бы хотелось написать более гибкое приложение с одним MVC, но дальше двигаться не могу, так как не решен вопрос с проверкой сессии

P.S. может у меня окончательно кривые руки, но Ваш последний пример не рабочий - че то с вервлетом нето

Может новую тему начать, как грамотно проектировать приложения, ИМХО - это 75% успеха, если не больше.
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33961344
Фотография Penkov Vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fidleно Ваш последний пример не рабочий - че то с вервлетом нето

что именно? давайте разбираться.
...
Рейтинг: 0 / 0
Нужна помощь по фильтру...
    #33961734
fidel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще что вспомнил, мы отходим от реализации MVC, хотелось бы конечно, что бы при удачном логине управление передавалось сервлету, а не jsp, мне кажеться лучше чтобы все таки сервлет управлял. Наверно все таки надо вернуться к старой модели.

По поводу вашего примера, я немного упростил сервлет, но все равно не работает, пока даже без фильтра:
login.jsp:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head><title>Login page</title></head>
  <body>
<form action="/login.do" method="get">
<input type="text" name="<%= LoginServlet.LOGIN_PARAMETER %>" />
<input type="pasword" name="<%= LoginServlet.PASSWORD_PARAMETER %>" />
<input type="submit" name="action" value="/login.do">      
</form>
  </body>
</html>

LoginServlet:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
 import  javax.servlet.http.HttpServlet;
 import  javax.servlet.http.*;
 import  javax.servlet.ServletException;
 import  java.io.IOException;
 import  java.io.PrintWriter;

 public   class  LoginServlet  extends  HttpServlet {

   public   static   final  String USER_KEY = "user";
   public   static   final  String LOGIN_PARAMETER = "login";
   public   static   final  String PASSWORD_PARAMETER = "pass";

   public   void  doGet(HttpServletRequest request, HttpServletResponse response)
         throws  ServletException, IOException {
      String login = request.getParameter(LOGIN_PARAMETER);
      String password = request.getParameter(PASSWORD_PARAMETER);

      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
      out.println(login);
      out.println(password);

        }

   public   void  doPost(HttpServletRequest request, HttpServletResponse response)
           throws  ServletException, IOException{

      doGet(request, response);
  }

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-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
</web-app>

и мой любимый котик 5.5.15 мне выдает:
HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

org.apache.jasper.JasperException: Unable to load class for JSP
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:598)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:147)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:315)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


root cause

java.lang.ClassNotFoundException: org.apache.jsp.login_jsp
java.net.URLClassLoader$1.run(URLClassLoader.java:200)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:188)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:133)
org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:65)
org.apache.jasper.JspCompilationContext.load(JspCompilationContext.java:596)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:147)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:315)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)


note The full stack trace of the root cause is available in the Apache Tomcat/5.5.15 logs.

я так понял он не может login.jsp - компильнуть в сервлет
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна помощь по фильтру...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]