В нашей жизни уже очень распространено автоматическое вход для входа в учетные записи, поэтому мы используем фильтры для реализации этой функции.
В основном он вводит автоматический логин пользователя и отменен автоматический вход, а также реализацию автоматического входа в систему за один день или n дней. После того, как IP -адрес пользователя добавлен в черный список, он напрямую использует фильтр для возврата на страницу предупреждения.
Функция фильтра очень мощная. Нам нужно добавить сервлет только после письменного бэкэнда фронта, чтобы реализовать эту функцию.
PS: Это просто демонстрация. Я сам смоделировал часть базы данных доступа, в основном сосредотачиваясь на реализации автоматической функции входа в систему.
Код стойки регистрации:
Успешный код переднего плана или нет, отображается на этой странице. Используются методы: применение тегов JSTL, значение чтения сеанса
<%@ page language = "java" import = "java.util.*" pageencoding = "utf-8"%> <%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%> <! doctpe html public "-//w3c // dtd httm.01.01. <html> <Head> </head> <body> <C: if test = "$ {! ement sessionscope.error}"> Ваш пароль или имя пользователя неверны. <!-- After displaying, you need to remove the value inside--> <c:remove var="error" scope="session"/> </c:if> <c:if test="${empty sessionScope.user }" var="boo"> <h2>This is the page for login</h2> <form action="<c:url value='/LoginServlet'//>" method="post"> NAME:<input type="text" name="name" /><br/> PWD:<input type="text" name="pwd" /><br/> Not automatically logged in:<input type="radio" name="time" value="0" /><br/> One day:<input type="radio" name="time" value="1" /><br/> Seven days:<input type="radio" name="time" value="7" /> <br/> <input type = "Recod" value = "upper"/> </form> </c: if> <c: if test = "$ {! boo}"> добро пожаловать, $ {sessionscope.user}, успешно зарегистрированный в <a href = " value = '/cancelautologin' //> "> cancelautologin </a> </c: if> </body> </html>Код внедрения сервлета:
Как и в предыдущем коде, он отвечает только за взаимодействие с стойкой регистрации: технология, используемая в нем
public void Dopost (httpservlectrequest, httpservletresponse response) Throws ServletException, ioException {string name = request.getParameter ("name"); String pwd = request.getParameter ("pwd"); String time = request.getParameter ("Time"); if (name! = null && pwd! = null && name.equals (pwd)) {// Напишите здесь, как вам нравится, вы должны перейти в Service-> DAO, чтобы получить доступ к базе данных позже // Предполагая, что вход в систему успешно, мы храним информацию в запросе сеанса. // Совместим с китайцем, нам нужно кодировать name = urlencoder.encode (name, "utf-8"); pwd = urlencoder.encode (pwd, "UTF-8"); Cookie c = new cookie ("Autologin", имя+","+pwd); // это значение не может быть использовано таким образом. Для соображений безопасности мы должны знать, чтобы использовать шифрование или вторичное шифрование, int _time = 60*60*24*integer.valueof (время); c.setmaxage (_time); response.addcookie (c); response.sendredirect (request.getContextPath ()+"/index.jsp"); // Настройка по умолчанию в фильтре состоит в том, чтобы перехватить перенаправление, а перенаправление - это прямая внутренняя пересылка. Однако с фильтром нелегко справиться, но вам нужно только настроить его в web.xml. } else {request.getSession (). setattribute ("error", "1"); response.sendredirect (request.getContextPath ()+"/index.jsp"); }}До сих пор я чувствую, что нет технологий. Тот же код, что и предыдущие, теперь является функцией фильтра.
Безопасный логин:
Мы использовали Dynamic Import для безопасного входа в систему раньше, чтобы не позволить пользователям входить в систему без входа в систему после входа в проект. Вы можете ввести интерфейс по желанию, введя проект. Динамический импорт может достичь этой функции, но лучше использовать фильтры.
Как правило, DoFilter () написан в фильтре; Вам нужно только определить, является ли контейнер сеанса нулевым. Это означает, что это не зарегистрировано. Просто вернитесь к интерфейсу входа в систему. В противном случае, отпустите
Код представлен:
Public void DoFilter (запрос ServletRequest, ответ ServletResponse, FilterChain Chain) бросает ioException, servletexception {httpservletrequest req = (httpservletrequest); Httpservletresponse resp = (httpservletresponse) ответ; String session = (string) req.getSession (). GetAttribute ("user"); if (session == null) {System.out.println ("ненормальный логин"); Resp.sendredirect (req.getContextPath ()+"/index.jsp"); } else {System.out.println ("Успешный вход"); chain.dofilter (req, resp); }}Кодирование персонажа:
Проблема кодирования персонажа. В прошлом мне приходилось вручную вводить его в Dopost () сервлета каждый раз, запрос. Setcharacterencoding («UTF-8»); Каждому сервлете нуждается в вводе, который слишком хлопот, поэтому мы используем фильтры для его реализации;
Код представлен:
<span style = "font-size: 18px;"> public void dofilter (запрос ServletRequest, ответ servletresponse, цепочка FilterChain), выбросы ioException, ServletException {request.setcharacterencoding (символ); // Удалить кодирование, полученное Client.SetContentType ("The Petrice/html; warset = ut-ut-8" sEtfe-8 "); chain.dofilter (запрос, ответ); } @Override public void init (config filterConfig) Throws ServletException {inecement = config.getInitParameter ("персонаж"); // a </span> <span style = "font-size: 18px; font-family: arial, helvetica, sans-serif;"> waracter set a a wornal rancail, </span> <span style = "font-serif;"> waracter at as arebail } </span>Приведенный выше символ определяется как глобальная переменная, а начальное значение настроено в web.xml.
Представлен код web.xml:
<Filter> <Filter-name> символ </filter-name> <filter-class> cn.hncu.filter.characterfilter </filter-class> <init-param> <param-name> символ </param-name> <param-value> utf-8 </param-value> </init-param> </filter>
Автоматический логин:
Основная идея: автоматический вход требует определения того, что сеанс имеет значения. Если есть, то после входа в систему, если нет, перейдите в местное печенье, чтобы найти его, существовать и сопоставить базу данных. Если совпадение успешно, добавьте контейнер сеанса.
Код представлен:
Public void DoFilter (запрос ServletRequest, ответ ServletResponse, цепочка FilterChain) бросает ioException, ServletException {// Автоматически вход в систему, вы должны установить, что в сеансе есть значения. Если есть, то вы вошли в систему, и нет, вы должны получить доступ к данным в файле cookie. Данные в файле cookie // соответствуют ли он базе данных? Да, установите значение в сеансе здесь, нет, пусть запрос httpservletrequest req = (httpservletrequest); Httpservletresponse resp = (httpservletresponse) ответ; String session = (string) req.getSession (). GetAttribute ("user"); if (session == null) {// Указывает, что в настоящее время не было вошло никакое cookie -файл cs [] = req.getcookies (); if (cs! = null) {for (cookie c: cs) {if (c.getname (). equals ("autologin")) {string value = c.getValue (); // Это зашифровано, но мы просто связаны с запятыми. String [] strs = value.split (","); // В logserlvet мы сначала используем кодирование, а затем соединение запятой. Нам нужно обратить вспять string name = urldecoder.decode (strs [0], "utf-8"); String pwd = urldecoder.decode (strs [1], "utf-8"); // Получить имя, данные PWD в фоновый фон. }}}}} chain.dofilter (req, resp); // Вы должны отпустить. Полем }Пользователи черного списка
Пользователи с черным списком, а не входить в систему, просто скажите им результат
Код представлен:
Public void DoFilter (запрос ServletRequest, ответ ServletResponse, FilterChain Chain) бросает ioException, servletexception {httpservletrequest req = (httpservletrequest); Httpservletresponse resp = (httpservletresponse) ответ; String ip = req.getRemoteAddr (); // получить доступ к IP; System.out.println (ip+"iipp"); if (set.contains (ip)) {// внутри системы черного списка. resp.getWriter (). print ("Вы в черном списке .. <a href = '"+req.getContextPath ()+"/index.jsp'> return </a>"); // Возврат невозможен, потому что индекс непосредственно перехватывает при запросе с сервера} else {chain.dofilter (req, resp); }} Тип, возвращенный черным списком, лучший. Я добавил это вручную здесь. Первоначально я должен прочитать его из базы данных, написав класс инструментов. Это может быть не только проверено, но и добавить, удалить и изменить - черный список.
Код представлен:
Hashset определяется как глобальная переменная, а SET содержит содержит, что очень эффективно.
public void init (FilterConfig Arg0) бросает ServletException {// Вот список черных списков, извлеченный из базы данных. Вот просто простой набор моделирования. ADD ("192.132.0.12"); // Это черный IP, который получается из фоновой базы данных. set.add ("localhost"); set.add ("192.132.32.4"); set.add ("127.0.0.1"); }Отменить автоматический вход в систему
Когда автоматический логин всегда считается небезопасным, мы устанавливаем, что нет автоматического входа в систему
Мы знали, что до этого автоматического входа в систему опирается на технологию, хранящуюся в файлах cookie, поэтому нам нужно только удалить файлы cookie.
Поскольку отмена автоматического входа в систему является гиперссылкой, она написана как сервлет.
Код представлен:
public void Dopost (httpservletrequest req, httpservletresponse resp), бросает Servletexception, ioException {cookie cc = new cookie («Autologin», «»); // Метод удаления печенья - это создание Connkie с тем же именем, а затем установить SetMaxage Cookie = 0; cc.setmaxage (0); cc.setpath (req.getContextPath ()); Resp.addcookie (CC); Resp.sendredirect (req.getContextPath ()+"/index.jsp"); }Приведенное выше может реализовать эти короткие функции ответа.
Выше приведено подробное объяснение соответствующих знаний, представленных редактором в Javaee с использованием фильтров для достижения автоматического входа в систему и безопасного входа для отмены автоматического входа в систему. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!