Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна помощь по фильтру... / 25 сообщений из 37, страница 1 из 2
29.08.2006, 09:33
    #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
29.08.2006, 11:11
    #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
29.08.2006, 13:43
    #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
29.08.2006, 13:50
    #33949513
fleh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
HttpSession session = (HttpSession) request.getSession(true);
...
Рейтинг: 0 / 0
29.08.2006, 13:51
    #33949520
fleh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
((HttpServletResponse) response).sendRedirect(loginUrl);
...
Рейтинг: 0 / 0
29.08.2006, 13:52
    #33949523
fleh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
и - не лучше ли классы в пакеты класть?
...
Рейтинг: 0 / 0
29.08.2006, 13:57
    #33949550
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
HttpSession session = (HttpSession) request.getSession(true);
Не помогает....
...
Рейтинг: 0 / 0
29.08.2006, 15:43
    #33950087
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
Господа, неужели никто не знает, как написать этот несчастный фильтр?
...
Рейтинг: 0 / 0
29.08.2006, 16:03
    #33950179
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
а что еще не так-то? вроде все уже подсказали
...
Рейтинг: 0 / 0
29.08.2006, 16:28
    #33950295
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
см. выше, ошибочки есть
...
Рейтинг: 0 / 0
29.08.2006, 16:40
    #33950344
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
fidelHttpSession session = (HttpSession) request.getSession(true);
Не помогает....

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

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

Код: plaintext
 response.sendRedirect(loginUrl);
- типа сannot resolve metod sendRedirect
...
Рейтинг: 0 / 0
29.08.2006, 17:02
    #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
31.08.2006, 11:02
    #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
31.08.2006, 11:22
    #33954774
ifconfig
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
а кто на null проверять будет session.getAttribute("loggedIn") ?
...
Рейтинг: 0 / 0
31.08.2006, 12:06
    #33954965
fidel
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
Спасибо за подсказку, добавил обработку NullPointerException тока так и не работает этот фильтр...уж сто раз теорию перечитал, вот не могу втыкнуть и все!
...
Рейтинг: 0 / 0
01.09.2006, 10:45
    #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
01.09.2006, 12:29
    #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
01.09.2006, 14:20
    #33958620
maddcast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
напиши getSession() вместо getSession(true)
и учи debug!
...
Рейтинг: 0 / 0
01.09.2006, 14:51
    #33958767
парабелум
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
а что такое debug?
...
Рейтинг: 0 / 0
01.09.2006, 15:04
    #33958824
Pitbull terrier
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
2 fidel

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

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

Dmitriy O "Итак вред от арабов (черных мусульман)
- Присутсвовали в татаро-монгольском иге"
...
Рейтинг: 0 / 0
01.09.2006, 15:17
    #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
04.09.2006, 10:37
    #33961341
fidle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь по фильтру...
2 Deady: Смысл в том, что перед мной стоит задача написать веб-приложение, в котором необходимо логиниться. Есть три типа доступа: root, power_user, user - соответственно я хотел зделать так: залогинился root - идет пернаправление на RootControllerServlet (роль этого сервлета - сервлет контроля MVC), залогинился power-user идет перенаправление на PowerUserControllerServlet соответственно он тоже выполняет роль сервлета MVC.

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

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

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

что именно? давайте разбираться.
...
Рейтинг: 0 / 0
04.09.2006, 12:21
    #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
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужна помощь по фильтру... / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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