Este artigo compartilha o código detalhado do Java para verificar se o usuário foi conectado e realiza login automático para sua referência. O conteúdo específico é o seguinte
1. Verifique se o usuário já está conectado
package cn.hongxin.filter;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;import javax.servlet.http.httpServletReQuest; importar javax.servlet.http.httpServletResponse; importar javax.servlet.http.httpsession; public class LoginFilter implements Filter{ public void init(FilterConfig filterConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //Forcing request to http... HttpServletRequest req = (HttpServletRequest) request; // obtém sessão httpSession ss = req.getSession (); // Obtenha o usuário da sessão se (ss.getAttribute ("user") == null) {System.err.println ("Você ainda não está conectado"); req.getSession (). SetAttribute ("msg", "por favor, faça login primeiro"); // redireciona para login httpServletResponse resp = (httpServletResponse); resp.sendRedirect (req.getContextPath ()+"/index.jsp"); [W2]} else {// Release Chain.Dofilter (solicitação, resposta); }} public void Destroy () {}}Configure no web.xml e considere 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>/views/*</url-pattern> </filter-mapping>
2. Realize o login automático
O login automático é para ajudar os usuários a efetuar login sem inserir seu nome de usuário e senha novamente ao usar esta página da web muitas vezes.
Isso significa que o usuário salva as informações de login e a pessoa do usuário em um cookie de arquivo local.
Nome, valor novo cookie (chave, valor);
Caminho - O valor padrão é o caminho em que o serlvet que atualmente salva o cookie está localizado.
Se o cookie estiver em tal caminho: http: // loclhost: 8080/Project/abc/aservlet, o caminho do cookie é: http: // loclhost/project/abc
Então significa:
Somente o servlet localizado no diretório http: // loclHost/Project/ABC pode ler o valor desse cookie.
se:
Salve a aula de cookies: http: // loclhost: 8080/Project/a/b/aservlet, o caminho padrão do cookie é; http: // loclHost/Project/a/b
Etapa 1: desenvolva uma página de login
<c: escolha> <c: quando test = "$ {vazio sessionscope.name}"> <nome name = "x" method = "post" action = "<c: url value = '/logInsERVlet'/>" name: <input type = "text" name = "name"/> <br/> AUTO: <input = "Radio" = "name" (name "/"> <br/> AUTO: <NPUT TIPO = " type = "Radio" name = "auto" value = "1"> 1 dia <br/> <input type = "radio" name = "auto" value = "7"> 1 semana <br/> <input type = "submit"/> </form> <br/b: value = '/logInservlet' //> "> logInservlet '/LogInservlet' //"> logInservlet </a> </c: caso contrário> </s: Chofver>Etapa 2: Salve cookies com sucesso
public void DoPost (solicitação httpServletRequest, httpServletResponse Response) lança servletexception, ioexception {// recebe nome de usuário string name = requestParameter ("nome"); String automaticamente = request.getParameter ("Auto"); // coloque as informações do usuário na sessão request.getSession (). SetAttribute ("nome", nome); // Defende se o automóvel é -1 if (! Auto.equals (" -1")) {int Day = Integer.parseint (Auto); // 1 | 7 int Seconds = 60*60*24*dia; // Declare o cookie c = novo cookie ("Autologin", nome); c.setMaxage (segundos); c.setPath (request.getContextPath ()); // Salvar resposta de cookie.addcookie (c); }}Etapa 3: o login automático deve ser alcançado se você precisar de acesso a qualquer página neste site.
Escreva um escrutínio para considerar todos os url =/*. Leia todos os cookies em Dofilter. Existe um cookie de nome com o nome Autologin?
Sempre deixe ir.
Public void Dofilter (Solicitação de servletRequest, resposta servletResponse, cadeia de filtragem) lança ioexception, servletexception {// leia cookie aqui httpServletRequest req = (httpServletRequest) solicitação; // Obtenha todos os cookies de cookies [] cs = req.getcookies (); if (cs! = null) {for (cookie c: cs) {if (c.getName (). Equals ("Autologin")) {// se houver um cookie que for automaticamente logado no valor da string = c.getValue (); // nome do usuário // login repere para req.getSession (). quebrar; }}} // Independentemente de serem automaticamente conectados ao Chain.Dofilter (solicitação, resposta); }Quarto envolve: configurar todos os URLs =/* em web.xml
<filter> <filter-name> Auto </filter-Name> <filter-Class> cn.itcast.filter.autofilter </filter-class> </filter> <filter-mapping> <filter-name> Auto </filter-Name> <url-pattern>/*</erl-pattern> </filter-Mapping>
Etapa 5: saída de desenvolvimento
System.err.println ("saída do usuário"); // exclua a sessão inteira request.getSession (). Invalidate (); Cookie C = novo cookie ("Autologin", "DDD"); c.setMaxage (0); c.setPath (request.getContextPath ()); Response.Addcookie (C); // request.getSession (). removeattribute ("nome"); Response.sendRedirect (request.getContextPath ()+"/index.jsp");Etapa 6: otimize o código
Como o usuário também inserirá o método Dofilter de AutoFiilter ao fazer login manualmente e ler todos os cookies para atravessá -lo uma vez. E essa travessia é redundante para o usuário.
Portanto, o URL do LogInsServet deve ser usado no Dofiler.
E você não pode efetuar login automaticamente ao fazer login.
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.