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

使用springboot結(jié)合vue實(shí)現(xiàn)sso單點(diǎn)登錄

 更新時(shí)間:2021年05月26日 16:33:23   作者:西城xml  
這篇文章主要為大家詳細(xì)介紹了如何使用springboot+vue實(shí)現(xiàn)sso單點(diǎn)登錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了springboot vue實(shí)現(xiàn)sso單點(diǎn)登錄的具體代碼,供大家參考,具體內(nèi)容如下

項(xiàng)目結(jié)構(gòu):

開發(fā)工具:idea, maven3
靜態(tài)文件下載地址

1.pom文件:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <parent>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-parent</artifactId>
 <version>2.1.2.RELEASE</version>
 <relativePath/> <!-- lookup parent from repository -->
 </parent>
 <groupId>com.xicheng</groupId>
 <artifactId>ssodemo</artifactId>
 <version>0.0.1-SNAPSHOT</version>
 <name>ssodemo</name>
 <description>Demo project for Spring Boot</description>
 <properties>
 <java.version>1.8</java.version>
 </properties>
 <dependencies>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-thymeleaf</artifactId>
 </dependency>
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-test</artifactId>
  <scope>test</scope>
 </dependency>
 </dependencies>
 <build>
 <plugins>
  <plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  </plugin>
 </plugins>
 </build>
</project>

2.MVC頁面跳轉(zhuǎn)配置類,如果請(qǐng)求直接跳轉(zhuǎn)頁面,采用該配置可以減少controller中代碼的編寫

package com.xicheng.ssodemo.common;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @author xichengxml
 * @date 2019/2/13 16:56
 */
@Configuration
public class SpringMvcConfig implements WebMvcConfigurer {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("login").setViewName("login");
    registry.addViewController("success").setViewName("success");
    registry.addViewController("error").setViewName("error");
  }
}

3.核心校驗(yàn)類編寫

package com.xicheng.ssodemo.common;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

/**
 * @author xichengxml
 * @date 2019/2/13 16:19
 * 登錄校驗(yàn)工具類
 */
public class LoginCheck {

  /** 用戶名 */
  private static final String USERNAME = "uname";
  /** 密碼 */
  private static final String PASSWORD = "pwd";
  /** cookie鍵 */
  public static final String COOKIE_KEY = "sso";
  /** cookie值 */
  public static final String COOKIE_VAL = "ssocookie";

  /**
   * 校驗(yàn)用戶名和密碼
   * @param userName 登錄用戶名
   * @param password 登錄密碼
   * @return 成功返回true; 失敗返回false
   */
  public static boolean checkLogin(String userName, String password) {
    return USERNAME.equals(userName) && PASSWORD.equals(password);
  }

  /**
   * 校驗(yàn)cookie
   * @param request
   * @return
   */
  public static boolean checkCookie(HttpServletRequest request) {
    Cookie[] cookies = request.getCookies();
    if (cookies != null && cookies.length != 0) {
      for (Cookie cookie : cookies) {
        if (COOKIE_KEY.equals(cookie.getName()) && COOKIE_VAL.equals(cookie.getValue())) {
          return true;
        }
      }
    }
    return false;
  }
}

4.核心登錄controller編寫

package com.xicheng.ssodemo.controller;

import com.xicheng.ssodemo.common.LoginCheck;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;

/**
 * @author xichengxml
 * @date 2019/2/13 16:31
 */
@Controller
public class LoginController {

  /**
   * 登錄成功后保存cookie在域下,返回登錄成功頁
   * @param uname
   * @param pwd
   * @param response
   * @return
   */
  @RequestMapping("/do-login")
  public String doLogin(String uname, String pwd, HttpServletResponse response) {
    if (LoginCheck.checkLogin(uname, pwd)) {
      Cookie cookie = new Cookie(LoginCheck.COOKIE_KEY, LoginCheck.COOKIE_VAL);
      cookie.setPath("/");
      response.addCookie(cookie);
      return "success";
    }
    return "error";
  }

}

5.登錄controller編寫

package com.xicheng.ssodemo.controller;

import com.xicheng.ssodemo.common.LoginCheck;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;

/**
 * @author xichengxml
 * @date 2019/2/13 17:53
 */
@Controller
public class SameOriginController {

  /**
   * cookie存在,登錄成功;否則返回登錄頁
   * @param request
   * @return
   */
  @RequestMapping("/login01")
  public String demo01(HttpServletRequest request) {
    return LoginCheck.checkCookie(request) ? "success" : "login";
  }

  @RequestMapping("/login02")
  public String demo02(HttpServletRequest request) {
    return LoginCheck.checkCookie(request) ? "success" : "login";
  }

}

6.登錄頁面及成功失敗頁面編寫

<!-- login.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登錄</title>
  <script src="/js/vue.js" type="text/javascript"></script>
  <script src="/js/element.js" type="text/javascript"></script>
  <script src="/js/axios.min.js" type="text/javascript"></script>
  <link href="/css/element.css" rel="external nofollow" rel="stylesheet" type="text/css"/>
</head>
<body>
  <div id="app">
    <el-input v-model="uname" placeholder="請(qǐng)輸入用戶名"></el-input>
    <el-input v-model="pwd" placeholder="請(qǐng)輸入密碼"></el-input>
    <el-button @click="submit" type="primary">登錄</el-button>
  </div>

  <script>
    new Vue({
      el: "#app",
      data: {
        uname: '',
        pwd: ''
      },
      methods: {
        submit: function () {
          // 獲取用戶名和密碼
          var uname = this.uname;
          var pwd = this.pwd;
          // 發(fā)送http請(qǐng)求
          axios.get("do-login", {params: {uname: uname, pwd: pwd}})
            .then(function (response) {
              if(response.status == 200) {
                location.href = "/success";
              } else {
                location.href = "/error";
              }
            })
            .catch(function (error) {
              alert("error--" + error);
            })
        }
      }
    });
  </script>
</body>
</html>
<!-- success.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>成功頁面</title>
</head>
<body>
  This is success page!
</body>
</html>
<!-- error.html -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>錯(cuò)誤頁面</title>
</head>
<body>
  This is error page!
</body>
</html>

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

相關(guān)文章

  • 通過Docker啟動(dòng)Solace并在Spring?Boot通過JMS整合Solace的操作方法

    通過Docker啟動(dòng)Solace并在Spring?Boot通過JMS整合Solace的操作方法

    本文將介紹如何在Spring中使用,雖然代碼使用的是Spring Boot,但并沒有使用相關(guān)starter,跟Spring的整合一樣,可通用,JMS是通過的消息處理框架,可以深入學(xué)習(xí)一下,不同的MQ在JMS的整合上都是類似的,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Java實(shí)現(xiàn)最小生成樹算法詳解

    Java實(shí)現(xiàn)最小生成樹算法詳解

    這篇文章主要介紹了如何在Java中實(shí)現(xiàn)最小生成樹算法,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-04-04
  • JavaWeb?Servlet技術(shù)及其應(yīng)用實(shí)踐

    JavaWeb?Servlet技術(shù)及其應(yīng)用實(shí)踐

    這篇文章主要介紹了JavaWeb?Servlet技術(shù),Servlet指在服務(wù)器端執(zhí)行的一段Java代碼,可以接收用戶的請(qǐng)求和返回給用戶響應(yīng)結(jié)果,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • Springboot整合Jedis實(shí)現(xiàn)單機(jī)版或哨兵版可切換配置方法

    Springboot整合Jedis實(shí)現(xiàn)單機(jī)版或哨兵版可切換配置方法

    這篇文章主要介紹了Springboot整合Jedis實(shí)現(xiàn)單機(jī)版或哨兵版可切換配置方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-11-11
  • springboot 打包部署 共享依賴包(分布式開發(fā)集中式部署微服務(wù))

    springboot 打包部署 共享依賴包(分布式開發(fā)集中式部署微服務(wù))

    這篇文章主要介紹了springboot 打包部署 共享依賴包(分布式開發(fā)集中式部署微服務(wù))的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-06-06
  • SpringBoot通過tractId操作日志鏈路跟蹤

    SpringBoot通過tractId操作日志鏈路跟蹤

    這篇文章給大家介紹SpringBoot通過tractId操作日志鏈路跟蹤,通過tractId,即可完成對(duì)從一個(gè)請(qǐng)求進(jìn)入系統(tǒng)到請(qǐng)求結(jié)束的日志追蹤,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2023-10-10
  • java逗號(hào)分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換

    java逗號(hào)分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換

    我們?cè)谌粘i_發(fā)時(shí)會(huì)經(jīng)常遇到將一個(gè)字符串按照逗號(hào)進(jìn)行分割,這篇文章主要給大家介紹了關(guān)于java逗號(hào)分隔String字符串及數(shù)組、集合相互轉(zhuǎn)換的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-02-02
  • Java中double精度丟失問題原因及解決辦法

    Java中double精度丟失問題原因及解決辦法

    使用Java double進(jìn)行運(yùn)算時(shí),經(jīng)常出現(xiàn)精度丟失的問題,總是在一個(gè)正確的結(jié)果左右偏0.0000**1,這篇文章主要給大家介紹了關(guān)于Java中double精度丟失問題原因及解決辦法,需要的朋友可以參考下
    2024-01-01
  • jmeter中json提取器如何提取多個(gè)參數(shù)值

    jmeter中json提取器如何提取多個(gè)參數(shù)值

    關(guān)于jmeter中的正則表達(dá)式及json提取器可以提取響應(yīng)值,但是實(shí)際可以需要上個(gè)接口的多個(gè)響應(yīng)值,本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下
    2021-11-11
  • MyBatis批量插入大量數(shù)據(jù)(1w以上)

    MyBatis批量插入大量數(shù)據(jù)(1w以上)

    MyBatis進(jìn)行批量插入數(shù)時(shí),一次性插入超過一千條的時(shí)候MyBatis開始報(bào)錯(cuò),本文主要介紹了MyBatis批量插入大量數(shù)據(jù)的解決方法,感興趣的可以了解一下
    2022-01-01

最新評(píng)論

巧家县| 邵东县| 安庆市| 平定县| 沅陵县| 大同县| 高邑县| 天水市| 广水市| 黑河市| 高雄市| 固原市| 吉木萨尔县| 太保市| 兴宁市| 白朗县| 星子县| 正蓝旗| 禹城市| 南昌县| 阳西县| 射阳县| 镇平县| 沈丘县| 衡阳县| 德庆县| 岑溪市| 罗平县| 黎平县| 田东县| 仁怀市| 永川市| 诏安县| 鲁山县| 额济纳旗| 梅州市| 蓝田县| 会同县| 宾阳县| 巢湖市| 法库县|