Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Servlet Filter User Authentication / 8 сообщений из 8, страница 1 из 1
05.02.2014, 23:35
    #38551242
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
Сижу уже 2-й день наверно уже часов 10 в суме над этим фильтром .. уже борода отросла ... тупо не идет мне ... стоит простая до ужаса задача : Авторизация Юзера ... то есть, он может доступатся до любой страницы, если он авторезирован, авторизация простая, тупо правда смотриться надо логин + пасс, но я пока делала другое и у меня имя и возраст, но это не главное ...
По логике идет вот так : фильм фильтрирует запросы, если в сесии есть ИД юзера, в которого ввод из формы имени и возраста совпадает с данными из БД, он авторезирован и ИД я заношу в СЕСИЮ, але нет, юзер должен ввести данные и т.д.

Проблема : код криво работает ... где то есть логическая ошибка, но как ее выправить я не знаю .. ХЕЛП
П.С. знаю, нормальные люди пишут в ЛОГГЕР, но мне нравится писать в консоль, пока она еще есть хДДД и куча гадости написано лишней, но это удалю, когда заработает ...


Код: java
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.
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("Start Filter");
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse servletResponse = (HttpServletResponse) response;
		HttpSession httpSession = httpServletRequest.getSession(false);
		System.out.println(httpSession == null);

		//Integer id = null;
		if (httpSession != null) {
			Integer id = (Integer) httpSession.getAttribute("id");
			if (id == null || id.equals("-1")) {
				System.out.println("filter 1");
				httpServletRequest.getServletContext()
						.getRequestDispatcher("/LoginServlet")
						.forward(request, response);
				//servletResponse.sendRedirect("/IndexServlet");
			} else {
				System.out.println("else bladstvo glychene");
				//chain.doFilter(request, response);
				servletResponse.sendRedirect(httpServletRequest.getRequestURI());
			}/*
			 * else { httpServletRequest.getServletContext()
			 * .getRequestDispatcher("/IndexServlet") .forward(request,
			 * response); }
			 */
		} else {
			System.out.println("filter 2");
			//System.out.println(id);
			System.out.println(httpServletRequest.getRequestURI());
			httpServletRequest.getServletContext()
					.getRequestDispatcher("/LoginServlet")
					.forward(request, response);
			// httpServletRequest.getRequestURI();
		}
		System.out.println("Stop Filter");
	}



protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
}

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String pname = request.getParameter("name");
		String page = request.getParameter("age");
		HttpSession httpSession = request.getSession();
		try {
			int age = Integer.parseInt(page);
			int id = new StudentDAOImpl().getStudentId(pname, age);
			httpSession.setAttribute("id", id);
			//return;
		} catch(NumberFormatException e) {
			getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
		}
		System.out.println("end login");
		//request.getServletContext().getRequestDispatcher("/IndexServlet").forward(request, response);
		//response.sendRedirect("/IndexServlet");
		//getServletContext().getRequestDispatcher("/login.jsp").forward(request, response);
...
Рейтинг: 0 / 0
06.02.2014, 00:59
    #38551279
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
что-то я не вижу что там что-то в бд проверяется азаза eBIND X-DDDDDDDDDDDDDDD
...
Рейтинг: 0 / 0
06.02.2014, 01:02
    #38551281
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
Лагман,

int id = new StudentDAOImpl().getStudentId(pname, age);

если -1 то не совпало, если больше 0, любое число, там автоинкремент, то совпало ... тупо сделано, но оно так работает 100 %
...
Рейтинг: 0 / 0
06.02.2014, 01:18
    #38551290
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
пробую переписать немного, что бы было ясно, но у меня уже пена с рота идет ... задрало это закыцлевание ...

Код: java
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.
		System.out.println("Start Filter");
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse httpServletResponse = (HttpServletResponse) response;
		HttpSession httpSession = httpServletRequest.getSession(false);
		System.out.println(httpSession == null);

		if (httpSession == null) {
			System.out.println("session == null");
			httpServletRequest.getServletContext()
					.getRequestDispatcher("/LoginServlet")
					.forward(request, response);
		} else {
			System.out.println("session != null");
			Integer id = (Integer) httpSession.getAttribute("id");
			System.out.println("id = " + id);
			if(id == null || id.equals(-1)) {
				System.out.println("id == null");
				System.out.println("id == -1");
				httpServletRequest.getServletContext()
				.getRequestDispatcher("/LoginServlet")
				.forward(request, response);
			} else {
// ТУТ ВСЕ РАБОТЕТ КРИВО как я понимаю, зацыклевание долбаное идет постоянно на одну и туже ссылку ...
				System.out.println(httpServletRequest.getRequestURI());
				httpServletResponse.sendRedirect(httpServletRequest.getRequestURI());
				/*httpServletRequest.getServletContext()
				.getRequestDispatcher("/IndexServlet")         
				.forward(request, response);*/
			}
...
Рейтинг: 0 / 0
06.02.2014, 01:41
    #38551299
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
я немного не так сделал (не помню как там с сесией, и редирект не вышел, но идея должна быть понятна)
на како-то этапе есть активный юзер в сервлете, у меня он сразу в ините, и если юзер "правильный", то ему позволено хоть куда, иначе - на страницу логина
Код: java
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.
package com.example;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class ControlServlet extends HttpServlet {

	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		getServletContext().setAttribute("user", "u11"); // suppose u1 is active and other value is inactive
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		
		String allow = null;
		try {
			allow = (String) request.getAttribute("allow");
			System.out.println("allow = " + allow);
		} catch (Exception e) {
			System.out.println("allow is empty!");
		}
		
		if(allow != null) {
			if(allow.equals("true")) {
				out.println("this is TARGET page");
				out.println("<br>");
			}
		} else {
			out.println("this is LOGIN page");
			out.println("<br>");
		}	
		
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


Код: java
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.
package com.example;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class controlFilter implements Filter {

	@Override
	public void destroy() {	
	}

	@Override
	public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
		
		String user = null;
		try {
			user = (String) req.getServletContext().getAttribute("user");
		} catch (Exception e) {
			System.out.println("user is empty");
		}
		if(user != null) {
			if(user.equals("u1")) {
				System.out.println("current user: u1");
				System.out.println("set allow = true");
				req.setAttribute("allow", "true");
			}
		}
	    chain.doFilter(req, res);
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
	}

}
...
Рейтинг: 0 / 0
06.02.2014, 02:04
    #38551309
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
а ну так понятно, редирект сам на себя безусловен, надо снять этот фильтр с пути на который редиректится

- Мам, у папы в роте
- Не в роте, а во рту!
- У папы во рту солдат повесился!
...
Рейтинг: 0 / 0
06.02.2014, 02:43
    #38551323
botasa111
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
Лагман,

как это сделать то ?))) мне потом надо будет еще подобное делать, только ставить Роль - админ или юзер и куда кто может доступатся ....
...
Рейтинг: 0 / 0
06.02.2014, 03:41
    #38551332
Лагман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Servlet Filter User Authentication
что-то типа такого http://www.xinotes.org/notes/note/1024/

Код: java
1.
2.
3.
4.
5.
	String url = request.getRequestURL().toString();
	if (matchExcludePatterns(url)) {
	    chain.doFilter(request, response);
	    return;
	}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Servlet Filter User Authentication / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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