В этой статье используется подробный код для Java, чтобы проверить, был ли пользователь вошел в систему, и реализует автоматический вход для вашей ссылки. Конкретный контент заключается в следующем
1. Убедитесь, что пользователь уже вошел в систему
Пакет cn.hongxin.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; импорт javax.servlet.filterConfig; import javax.servlet.servletexception; impormerssessessessessessessessessessessessessessessessessessessessessessessessessess. javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; импорт javax.servlet.http.httpsession; Общедоступный класс. // получить сеанс httpsession ss = req.getSession (); // Получить пользователя из сеанса if (ss.getattribute ("user") == null) {System.err.println ("Вы еще не вошли в систему"); req.getSession (). setattribute ("msg", "Пожалуйста, войдите в систему первым"); // перенаправить в систему httpservletresponse resp = (httpservletresponse); Resp.sendredirect (req.getContextPath ()+"/index.jsp"); [W2]} else {// release chain.dofilter (запрос, ответ); }} public void destry () {}}Настройка в web.xml и рассмотрим jsps/*:
<filter> <filter-name> login </filter-name> <filter-class> cn.itcast.filter.loginfilter </filter-class> </filter> <filter-mapping> <filter-name> login </filter-name> <url-pattern>/jsps/*</url-pattern> <url-pattern> <url-pattern>/jsps/*</url-pattern> <url> </url-pattern> </url-pattern> </url-pattern> </url-pattern> </url-pattern>/j </filter-карты>
2. Реализуйте автоматический вход в систему
Автоматический вход в систему - помочь пользователям войти в систему, не введя их имя пользователя и пароль при использовании этой веб -страницы много раз.
Это означает, что пользователь сохраняет информацию о входе в систему и человека в локальном файле cookie.
Имя, значение Нового Cookie (ключ, значение);
Путь - значение по умолчанию - это путь, по которому находится Серлвет, который в настоящее время сохраняет печенье.
Если cookie находится на таком пути: http: // loclhost: 8080/project/abc/aServlet, путь cookie: http: // loclhost/project/abc
Тогда это означает:
Только сервлет, расположенный в каталоге http: // loclhost/project/abc, может прочитать значение этого файла cookie.
если:
Сохранить класс cookie: http: // loclhost: 8080/project/a/b/aServlet, путь по умолчанию печенья; http: // loclhost/project/a/b
Шаг 1: Разработать страницу входа в систему
<C: Выберите> <C: When Test = "$ {yety SessionsCope.name}"> <form name = "x" method = "post" action = "<c: url value = '/loginservlet'/>"> name: <input type = "text" name = "/> <br/> auto: <input = name" name = " type = "radio" name = "auto" value = "1"> 1 день <br/> <input type = "radio" name = "auto" value = "7"> 1 неделя <br/> <input type = "suppe"/> </form> </c: when> <c: иное> вы уже вошли в систему: $ {name} <br/> href = " value = '/loginservlet' //> "> loginservlet '/loginservlet' //"> loginservlet </a> </c: в противном случае> </c: выберите>Шаг 2: успешно сохранить файлы cookie
public void dopost (httpservletrequest, httpservletresponse response) Throws ServletException, ioException {// Приема имени пользователя name name = request.getParameter ("name"); String auto = request.getParameter ("Auto"); // Поместить пользовательскую информацию в Session request.getSession (). Setattribute ("name", name); // защищать, является ли Auto -1 if (! Auto.equals (" -1")) {int day = integer.parseint (auto); // 1 | 7 Int Seconds = 60*60*24*Day; // объявить печенье cookie c = new Cookie ("Autologin", имя); C.SetMaxage (секунды); c.setpath (request.getContextPath ()); // Сохранить ответ cookie.addcookie (c); }}Шаг 3: Автоматический вход должен быть достигнут, если вам требуется доступ к любой странице на этом веб -сайте.
Напишите проверку, чтобы рассмотреть все url =/*. Прочитайте все печенье в Dofilter. Есть ли имя cookie с именем Autologin?
Всегда отпускай.
public void dofilter (запрос ServletRequest, ответ ServletResponse, FilterChain Chain) бросает ioException, ServletException {// Читать cookie здесь httpservletrequest req = (httpservletrequest); // получить все файлы cookie [] cs = req.getcookies (); if (cs! = null) {for (cookie c: cs) {if (c.getname (). equals ("autologin")) {// Если есть файл cookie, который автоматически регистрируется в строковом значении = c.getvalue (); // имя пользователя // login успешно возвращается на req.getsession (). перерыв; }}} // Независимо от того, автоматически ли он вошел в цепь.dofilter (запрос, ответ); }Четвертый включает в себя: настроить все urls =/* в web.xml
<Filter> <Filter-name> Auto </filter-name> <filter-class> cn.itcast.filter.autofilter </filter-class> </filter> <mifter-mapping> <filter-name> Auto </filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <url-pattern>/*</url-pattern>
Шаг 5: Выход развития
System.err.println («Выход пользователя»); // Удалить весь запрос сеанса.getSession (). Invalidate (); Cookie c = новое печенье ("Autologin", "DDD"); c.setmaxage (0); c.setpath (request.getContextPath ()); response.addcookie (c); // request.getSession (). removeAttribute ("name"); response.sendredirect (request.getContextPath ()+"/index.jsp");Шаг 6: Оптимизируйте код
Поскольку пользователь также введет метод AutoFiilter DoFilter при вводе вручную, и будет прочитать все файлы cookie, чтобы пройти его один раз. И это обход является избыточным для пользователя.
Следовательно, URL -адрес loginservet должен использоваться в дофилере.
И вы не можете войти автоматически при входе в систему.
Выше приведено в этой статье, я надеюсь, что это будет полезно для каждого обучения.