最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaWeb使用Session和Cookie實現(xiàn)登錄認證

 更新時間:2017年03月17日 14:34:42   作者:饑渴計科極客杰鏗  
本篇文章主要介紹了JavaWeb使用Session和Cookie實現(xiàn)登錄認證,具有一定的參考價值,感興趣的小伙伴們可以參考一下。

后臺管理頁面往往需要登錄才可以進行操作,這時就需要Seession來記錄登錄狀態(tài)

要實現(xiàn)起來也是非常簡單,只需要自定義一個HandlerInterceptor就行了

自定義的HandlerInterceptor也只有短短幾行代碼

public class LoginInterceptor implements HandlerInterceptor {

  @Override
  public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object obj, Exception err)
      throws Exception {
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response,
              Object obj, ModelAndView mav) throws Exception {

  }

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
               Object obj) throws Exception {
    //獲取session里的登錄狀態(tài)值
    String str = (String) request.getSession().getAttribute("isLogin");
    //如果登錄狀態(tài)不為空則返回true,返回true則會執(zhí)行相應(yīng)controller的方法
    if(str!=null){
      return true;
    }
    //如果登錄狀態(tài)為空則重定向到登錄頁面,并返回false,不執(zhí)行原來controller的方法
    response.sendRedirect("/backend/loginPage");
    return false;
  }
}

Controller代碼

@Controller
@RequestMapping("/backend")
public class BackendController {

  @RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
  public String loginPage(HttpServletRequest request,String account, String password){
    return "login";
  }

  @RequestMapping(value = "/login", method = {RequestMethod.POST})
  public String login(HttpServletRequest request,RedirectAttributes model, String account, String password){
    //驗證賬號密碼,如果符合則改變session里的狀態(tài),并重定向到主頁
    if ("jack".equals(account)&&"jack2017".equals(password)){
      request.getSession().setAttribute("isLogin","yes");
      return "redirect:IndexPage";
    }else {
      //密碼錯誤則重定向回登錄頁,并返回錯誤,因為是重定向所要要用到RedirectAttributes
      model.addFlashAttribute("error","密碼錯誤");
      return "redirect:loginPage";
    }
  }
  //登出,移除登錄狀態(tài)并重定向的登錄頁
  @RequestMapping(value = "/loginOut", method = {RequestMethod.GET})
  public String loginOut(HttpServletRequest request) {
    request.getSession().removeAttribute("isLogin");
    return "redirect:loginPage";
  }
  @RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
  public String IndexPage(HttpServletRequest request){
    return "Index";
  }

}

spring的配置

  <!--省略其他基本配置-->

  <!-- 配置攔截器 -->
  <mvc:interceptors>
    <!-- 配置登陸攔截器 -->
    <mvc:interceptor>
      <!--攔截后臺頁面的請求-->
      <mvc:mapping path="/backend/**"/>
      <!--不攔截登錄頁和登錄的請求-->
      <mvc:exclude-mapping path="/backend/loginPage"/>
      <mvc:exclude-mapping path="/backend/login"/>
      <bean class="com.ima.Interceptor.LoginInterceptor"></bean>
    </mvc:interceptor>
  </mvc:interceptors>

一個簡單的Session實現(xiàn)登錄認證系統(tǒng)就這樣完成了,如果想登錄狀態(tài)退出瀏覽器后仍保留一段時間的可以將Session改為Cookie

一般情況下我們都會使用Cookie

Cookie和Session的方法差不多

使用Cookie的自定義HandlerInterceptor

public class LoginInterceptor implements HandlerInterceptor {

  @Override
  public void afterCompletion(HttpServletRequest request,
                HttpServletResponse response, Object obj, Exception err)
      throws Exception {
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response,
              Object obj, ModelAndView mav) throws Exception {

  }

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
               Object obj) throws Exception {
//    獲取request的cookie
    Cookie[] cookies = request.getCookies();
    if (null==cookies) {
      System.out.println("沒有cookie==============");
    } else {
//      遍歷cookie如果找到登錄狀態(tài)則返回true執(zhí)行原來controller的方法
      for(Cookie cookie : cookies){
        if(cookie.getName().equals("isLogin")){
          return true;
        }
      }
    }
//    沒有找到登錄狀態(tài)則重定向到登錄頁,返回false,不執(zhí)行原來controller的方法
    response.sendRedirect("/backend/loginPage");
    return false;
  }
}

Controller的變化也不大

@Controller
@RequestMapping("/backend")
public class BackendController {

  @RequestMapping(value = "/loginPage", method = {RequestMethod.GET})
  public String loginPage(HttpServletRequest request, String account, String password) {
    return "login";
  }

  @RequestMapping(value = "/login", method = {RequestMethod.POST})
  public String login(HttpServletRequest request, HttpServletResponse response, RedirectAttributes model, String account, String password) {
    if ("edehou".equals(account) && "aidou2017".equals(password)) {
      Cookie cookie = new Cookie("isLogin", "yes");
      cookie.setMaxAge(30 * 60);// 設(shè)置為30min
      cookie.setPath("/");
      response.addCookie(cookie);
      return "redirect:IndexPage";
    } else {
      model.addFlashAttribute("error", "密碼錯誤");
      return "redirect:loginPage";
    }
  }

  @RequestMapping(value = "/logOut", method = {RequestMethod.GET})
  public String loginOut(HttpServletRequest request, HttpServletResponse response) {
    Cookie[] cookies = request.getCookies();
    for (Cookie cookie : cookies) {
      if (cookie.getName().equals("isLogin")) {
        cookie.setValue(null);
        cookie.setMaxAge(0);// 立即銷毀cookie
        cookie.setPath("/");
        response.addCookie(cookie);
        break;
      }
    }
    return "redirect:loginPage";
  }

  @RequestMapping(value = "/IndexPage", method = {RequestMethod.GET})
  public String IndexPage(HttpServletRequest request) {
    return "Index";
  }

}

spring的配置和之前的一模一樣

注意

這里只是演示,建議在實際項目中Cookie的鍵和值要經(jīng)過特殊處理,否則會引發(fā)安全問題

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Java8中的Lambda表達式

    詳解Java8中的Lambda表達式

    這篇文章主要介紹了Java8中的Lambda表達式的相關(guān)資料,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • 詳解Java的內(nèi)存模型

    詳解Java的內(nèi)存模型

    本文更準確的說法應(yīng)該是JVM的內(nèi)存模型,但是這里又牽扯了一些其他的前置知識,主要是想從Java入手,從源頭上梳理一遍整個Java底層運行的機制,中間會額外補充一些和題目無關(guān)的前置基礎(chǔ),導(dǎo)致主講內(nèi)存模型的篇幅所占的比例就不是那么絕對。
    2021-06-06
  • MyBatis-Generator的配置說明和使用

    MyBatis-Generator的配置說明和使用

    本文主要介紹了MyBatis-Generator的配置說明和使用的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • Java實現(xiàn)英文句子中的單詞順序逆序輸出的方法

    Java實現(xiàn)英文句子中的單詞順序逆序輸出的方法

    這篇文章主要介紹了Java實現(xiàn)英文句子中的單詞順序逆序輸出的方法,涉及java字符串遍歷、判斷、截取、輸出等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • 分布式調(diào)度器之Spring Task 的使用詳解

    分布式調(diào)度器之Spring Task 的使用詳解

    SpringTask是Spring框架中用于任務(wù)調(diào)度的組件,通過簡單的注解就能實現(xiàn)定時任務(wù)的創(chuàng)建和調(diào)度,可以通過配置線程池來實現(xiàn),本文給大家介紹分布式調(diào)度器之Spring Task 的使用,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • Struts2學(xué)習(xí)筆記(4)-通配符的使用

    Struts2學(xué)習(xí)筆記(4)-通配符的使用

    本文主要介紹Struts2中通配符的使用,簡單實用,希望能給大家做一個參考。
    2016-06-06
  • Java連接數(shù)據(jù)庫步驟解析(Oracle、MySQL)

    Java連接數(shù)據(jù)庫步驟解析(Oracle、MySQL)

    本文主要介紹了Java連接Oracle數(shù)據(jù)庫和MySQL數(shù)據(jù)庫的步驟解析。具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • 如何用匿名內(nèi)部類實現(xiàn) Java 同步回調(diào)

    如何用匿名內(nèi)部類實現(xiàn) Java 同步回調(diào)

    這篇文章主要介紹了如何用匿名內(nèi)部類實現(xiàn) Java 同步回調(diào),幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-10-10
  • MyBatis一二級緩存

    MyBatis一二級緩存

    這篇文章主要介紹了MyBatis一二級緩存的相關(guān)知識,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-06-06
  • SpringBoot生成PDF的方法

    SpringBoot生成PDF的方法

    生成PDF是一種常見的需求,本文主要介紹了SpringBoot生成PDF的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05

最新評論

孝感市| 涡阳县| 定兴县| 临高县| 阳城县| 噶尔县| 木里| 呈贡县| 闸北区| 蒙自县| 宁乡县| 大洼县| 咸阳市| 兰西县| 炉霍县| 青州市| 玛多县| 东乡县| 绵竹市| 托克托县| 桐庐县| 岐山县| 黄陵县| 邳州市| 泸溪县| 习水县| 从江县| 连云港市| 顺昌县| 瑞金市| 晋江市| 吉安县| 宁城县| 通州区| 循化| 天水市| 陆良县| 肇东市| 山东| 武宁县| 永福县|