Em nossas vidas, já é muito comum para o login automático em contas, por isso usamos filtros para implementar essa função.
Ele apresenta principalmente o login automático do usuário e o login automático cancelado, bem como a realização do login automático em um dia ou N dias. Depois que o IP do usuário é adicionado à lista negra, ele usa diretamente o filtro para retornar a uma página de aviso.
A função do filtro é muito poderosa. Precisamos adicionar apenas o servlet após o back-end escrito do front-end para realizar essa função.
PS: Esta é apenas uma demonstração. Simplei a parte do banco de dados de acesso sozinho, concentrando -se principalmente na realização da função de login automática.
Código da recepção:
Se o código em primeiro plano é bem -sucedido ou não, é exibido nesta página. Técnicas usadas: Aplicação de tags JSTL, Valor da leitura da sessão
<%@ página linguagem = "java" import = "java.util. <html> <head> </head> <body> <c: se test = "$ {! Sessionscope.error {! Depois de exibir, você precisa remover o valor interno-> <c: remover var = "error" scope = "session"/> </c: if> <c: if test = "$ {empty sessionscope.user}" var = "boo"> <h2> esta é a página para login </h2> <form) type = "text" name = "name" /> <br/> PWD: <input type = "text" name = "pwd" /> <br/> não está conectado automaticamente: <input type = "radio" name = "time" value = "0" /> <br/> um dia: <input type = "" name = "time" /"" "1" "1" " /> value = "7"/> <br/> <input type = "submit" value = "submit"/> </form> </c: if> <c: if test = "$ {! boo}"> Bem -vindo, $ {Sessionscope.User}, registrou com sucesso <a href = ""> módulo 1 </a> href = "<c: url value = '/cancellautologin' //>"> cancellautologin </a> </c: se> </body> </html>O Código de Implementação do Servlet:
Como o código anterior, ele é responsável apenas por interagir com a recepção: a tecnologia usada nele inclui codificação de URL, o valor está no cookie, a sessão está na página e a página é saltada (encaminhada)
public void DoPost (solicitação httpServletRequest, httpServletResponse resposta) lança servletexception, ioexception {string name = request.getParameter ("nome"); String pwd = request.getParameter ("pwd"); String time = request.getParameter ("time"); if (nome! // compatível com chinês, precisamos codificar nome = urlencoder.encode (nome, "utf-8"); pwd = urlencoder.encode (pwd, "utf-8"); Cookie C = novo cookie ("Autologin", Name+","+PWD); // Este valor não pode ser usado dessa maneira. Para considerações de segurança, devemos saber usar criptografia ou criptografia secundária, int _time = 60*60*24*integer.valueof (tempo); c.setMaxage (_time); Response.Addcookie (C); Response.sendRedirect (request.getContextPath ()+"/index.jsp"); // A configuração padrão no filtro é interceptar o redirecionamento, e o encaminhamento é o encaminhamento interno direto. No entanto, o filtro não é fácil de lidar, mas você só precisa configurá -lo no web.xml. } else {request.getSession (). SetAttribute ("erro", "1"); Response.sendRedirect (request.getContextPath ()+"/index.jsp"); }}Até agora, sinto que não há tecnologia. O mesmo código que os anteriores agora é a função do filtro.
Login seguro:
Utilizamos a importação dinâmica para fazer login com segurança antes, para impedir que os usuários efetuem login sem fazer login após a entrada do projeto. Você pode inserir a interface à vontade entrando no projeto. A importação dinâmica pode alcançar essa função, mas é melhor usar filtros.
Geralmente, Dofilter () está escrito no filtro; Você só precisa determinar se o contêiner de sessão é nulo. Isso significa que isso não está conectado. Basta voltar à interface de login. Caso contrário, deixe ir
O código é apresentado:
Public void Dofilter (Solicitação de servletRequest, resposta servletResponse, cadeia de filtro) lança ioexception, servletexception {httpServletRequest req = (httpServleTrequest); HttpServletResponse resp = (httpServletResponse); String session = (string) req.getSession (). GetAttribute ("usuário"); if (session == null) {System.out.println ("login anormal"); resp.sendRedirect (req.getContextPath ()+"/index.jsp"); } else {System.out.println ("Login bem -sucedido"); Chain.Dofilter (req, resp); }}Codificação de caracteres:
O problema da codificação de caráter. No passado, eu tive que entrar manualmente no DoPost () do servlet toda vez, request.Setcharacterencoding ("UTF-8"); Todo servlet precisa de entrada, o que é muito problemático, por isso usamos filtros para implementá -lo;
O código é apresentado:
<span style = "font-size: 18px;"> Dofilter public void (solicitação de servletRequest, resposta servletResponse, cadeia de filtragem) lança IoException, servletexception {request.SetcharAcTerEncoding (caractere); Remova a codificação recebida pelo cliente.SetContentTyPe (hmt; Chain.Dofilter (solicitação, resposta); } @Override public void init (filterConfig Config) lança servletexception {caractere = config.getinitParameter ("caractere"); // a </span> <span style = "font-size: 18px; font-family: arial, helvetica, sans-serif; } </span>O caractere acima é definido como uma variável global e o valor inicial é configurado no web.xml.
O código web.xml é apresentado:
<filter> <filter-name> caractere </filter-name> <filter-Class> cn.hncu.filter.characterfilter </filter-class> <itir--param> <amam-name> caractere </param-name </param-value> utf-8 </amam-value> </init-Param> </filter>
Login automático:
Ideia principal: o login automático requer determinação que a sessão possui valores. Se houver, depois de fazer login, se não houver, vá ao cookie local para encontrá -lo, exista e corresponda ao banco de dados. Se a correspondência for bem -sucedida, adicione o contêiner de sessão.
O código é apresentado:
Public void Dofilter (Solicitação de servletRequest, resposta servletResponse, cadeia de filtragem) lança IoException, servletexception {// efetuar login automaticamente, você deve definir que existem valores na sessão. Se houver, você fez login e não, você deve acessar os dados no cookie. Os dados no cookie // se correspondem ao banco de dados? Sim, defina o valor na sessão aqui, não, deixe httpServletRequest req = (httpServletRequest) solicitar; HttpServletResponse resp = (httpServletResponse); String session = (string) req.getSession (). GetAttribute ("usuário"); if (session == null) {// indica que nenhum cookie foi conectado atualmente cs [] = req.getcookies (); if (cs! = null) {for (cookie c: cs) {if (c.getName (). Equals ("autologin")) {String value = c.getValue (); // Isso é criptografado, mas apenas conectamos a vírgulas. String [] strs = value.split (","); // em logSerlvet, usamos a codificação primeiro e depois a conexão de vírgula. Precisamos reverter o nome da string = urldecoder.decode (strs [0], "utf-8"); String pwd = urldecoder.decode (strs [1], "utf-8"); // Obtenha o nome, dados PWD no plano de fundo para acessar o banco de dados, apenas escrevemos if (name.equals (pwd)) {req.getSession (). SetAttribute ("user", nome); // Defina os parâmetros quebram em sessão; }}}}} cadeia.dofilter (req, resp); // você deve deixar ir. . }Usuários na lista negra
Usuários na lista negra, não efetuam login, basta dizer a eles o resultado
O código é apresentado:
Public void Dofilter (Solicitação de servletRequest, resposta servletResponse, cadeia de filtro) lança ioexception, servletexception {httpServletRequest req = (httpServleTrequest); HttpServletResponse resp = (httpServletResponse); String ip = req.getRemoteaddr (); // obtive acesso IP; System.out.println (ip+"iipp"); if (set.contains (ip)) {// dentro do Blacklist System.out.println ("set"); resp.getWriter (). print ("Você está na lista negra .. <a href = '"+req.getContextPath ()+"/index.jsp'> return </a>"); // O retorno não é possível, porque o índice intercepta diretamente ao solicitar do servidor} else {Chain.dofilter (req, resp); }} O tipo retornado pela lista negra é a melhor. Eu adicionei manualmente aqui. Originalmente, devo lê -lo no banco de dados escrevendo uma classe de ferramenta. Ele não só pode ser verificado, mas também adicionar, excluir e modificar - lista negra.
O código é apresentado:
O hashset é definido como uma variável global e o conjunto contém, o que é muito eficiente.
public void init (filterConfig arg0) lança servletexception {// aqui está uma lista de lista negra, recuperada do banco de dados. Aqui está apenas um conjunto de simulação simples.Add ("192.132.0.12"); // Este é um IP preto, obtido no banco de dados em segundo plano. set.add ("localhost"); set.add ("192.132.32.4"); set.add ("127.0.0.1"); }Cancelar login automático
Quando o login automático é sempre considerado inseguro, definimos que nenhum login automático
Sabíamos antes que o login automático depende da tecnologia armazenada em cookies, então aqui precisamos apenas excluir os cookies.
Como o cancelamento de login automático é um hiperlink, ele é escrito como um servlet.
O código é apresentado:
public void DoPost (httpServletRequest req, httpServletResponse resp) lança servletexception, ioexception {cookie cc = new cookie ("autologin", ""); // o método para excluir o cookie é criar um connkie com o mesmo nome e depois definir o setMaxage cc.setMaxage (0); cc.setPath (req.getContextPath ()); resp.addcookie (CC); resp.sendRedirect (req.getContextPath ()+"/index.jsp"); }O exposto acima pode realizar essas funções de resposta curta.
O exposto acima é uma explicação detalhada do conhecimento relevante introduzido pelo editor do Javaee usando filtros para obter login automático e garantir o login para cancelar o login automático. Espero que seja útil para todos. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a todos a tempo. Muito obrigado pelo seu apoio ao site wulin.com!