程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java驗證用戶能否曾經登錄 java完成主動登錄

java驗證用戶能否曾經登錄 java完成主動登錄

編輯:關於JAVA

java驗證用戶能否曾經登錄 java完成主動登錄。本站提示廣大學習愛好者:(java驗證用戶能否曾經登錄 java完成主動登錄)文章只能為提供參考,不一定能成為您想要的結果。以下是java驗證用戶能否曾經登錄 java完成主動登錄正文


本文為年夜家分享了java驗證用戶能否曾經登錄與完成主動登錄的具體代碼,供年夜家參考,詳細內容以下

1、驗證用戶能否曾經登錄

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;

import javax.servlet.http.HttpServletResponse;

import 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 {

    //將request強轉成htt...

    HttpServletRequest req = (HttpServletRequest) request;

    //獲得session

    HttpSession ss = req.getSession();

    //從session中獲得user

    if(ss.getAttribute("user")==null){

      System.err.println("你還沒有登錄");

      req.getSession().setAttribute("msg", "請你先登錄");

      //重定向到登錄

      HttpServletResponse resp = (HttpServletResponse) response;

      resp.sendRedirect(req.getContextPath()+"/index.jsp");[W2] 

    }else{

      //放行

      chain.doFilter(request, response);

    }

  }

  public void destroy() {

  }

}

設置裝備擺設到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>/views/*</url-pattern>

 </filter-mapping>

2、完成主動登錄 

主動登錄,是為了贊助用戶屢次應用這個網頁時,不消再次輸出用戶名和暗碼便可以登錄。

是指用戶將用戶的登錄信息,人,保留到當地的文件中Cookie中。

 Name,value – 聲明時 new Cookie(key,value);

 Path        - 默許值,即為以後保留cookie的這個serlvet地點的途徑。

假如Cookie在如許的途徑:http://loclhost:8080/project/abc/AServlet,則Cookie的途徑為: http://loclhost/project/abc

 則解釋:

地點在http://loclhost/project/abc目次下的servlet才可以讀取這個cookie的值。

假如:

保留Cookie類:http://loclhost:8080/project/a/b/AServlet,則Cookie的默許path為;http://loclhost/project/a/b

第一步:開辟一個登錄頁面

<c:choose>

  <c:when test="${empty sessionScope.name}">

    <form name="x" method="post" action="<c:url value='/LoginServlet'/>">

      Name:<input type="text" name="name"/><br/>

      auto:

      <input type="radio" name="auto" value="-1">不主動登錄

      <br/>

      <input type="radio" name="auto" value="1">1天<br/>

      <input type="radio" name="auto" value="7">1周<br/>

      <input type="submit"/>

    </form>

  </c:when>

  <c:otherwise>

    你曾經登錄了:${name}<br/>

    <a href="<c:url value='/LoginServlet'/>">加入</a>

  </c:otherwise>

</c:choose>

第二步:勝利保留cookie

  public void doPost(HttpServletRequest request, HttpServletResponse response)

      throws ServletException, IOException {

    //吸收用戶姓名

    String 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

      Cookie c = new Cookie("autoLogin",name);

      c.setMaxAge(seconds);

      c.setPath(request.getContextPath());

      //保留cookie

      response.addCookie(c);

     

    }

  }

 

第三步:請求拜訪本網點中任何一個頁面都應當完成主動登錄

寫一個過慮器,對一切url=/*停止過慮。在doFilter中讀取一切cookie。能否存在稱號為autoLogin的稱號cookie。

永久都放行。

 

public void doFilter(ServletRequest request, ServletResponse response,

      FilterChain chain) throws IOException, ServletException {

    //在這兒讀取cookie

    HttpServletRequest req = (HttpServletRequest) request;

    //獲得所的有cookie

    Cookie[] cs = req.getCookies();

    if(cs!=null){

      for(Cookie c:cs){

       if(c.getName().equals("autoLogin")){//假如存在主動登錄的cookie

         String value = c.getValue();//用戶稱號

         //登錄勝利是指

         req.getSession().setAttribute("name", value);

         break;

       }

      }

    }

    //不論能否主動登錄成

    chain.doFilter(request, response);

  }

第四涉:設置裝備擺設到web.xml中對一切url=/*

<filter>

  <filter-name>auto</filter-name>

  <filter-class>cn.itcast.filter.AutoFilter</filter-class>

 </filter>

 <filter-mapping>

  <filter-name>auto</filter-name>

  <url-pattern>/*</url-pattern>

 </filter-mapping>

 第五步:開辟加入

System.err.println("用戶加入");

    //刪除全部session

    request.getSession().invalidate();

    Cookie c = new Cookie("autoLogin", "ddd");

    c.setMaxAge(0);

    c.setPath(request.getContextPath());

    response.addCookie(c);

//   request.getSession().removeAttribute("name");

    response.sendRedirect(request.getContextPath()+"/index.jsp");

第六步:優化代碼

    因為用戶在做手工登錄時,也會進入AutoFiilter的doFilter辦法,且讀取一切Cookie遍歷一次。而此次遍歷對用戶來講是過剩。

    所以應當將LoginServet這個url在doFiler中不外過慮。

    且對加入也不克不及主動登錄。

以上就是本文的全體內容,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved