欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Security十分鐘入門教程

 更新時間:2022年09月08日 14:48:53   作者:夜貓nightcat  
這篇文章主要介紹了Spring Security入門教程,Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架

寫在前面

我們在學(xué)習(xí)技術(shù)的過程中,學(xué)習(xí)的渠道大概有以下幾種:看書,視頻,博客。我們會發(fā)現(xiàn),一種技術(shù)開始流行的時候,各種形式的講述也就出現(xiàn)了。那么,出書,錄視頻,寫博客的人,在他們之前,是沒有什么現(xiàn)成的東西讓他們學(xué)習(xí)的,他們是怎么上手的呢?換句話說,怎么才能有效的快速的上手一門技術(shù)呢?

這篇文章,我們一起從零開始學(xué)習(xí)SpringSecurity,技術(shù)點不重要,重要的是學(xué)習(xí)方式。

說來慚愧,在寫這個專欄之前,我并沒有學(xué)習(xí)過SpringSecurity。這也是我的一次新的嘗試。

目標

這篇文章的目標是實現(xiàn)簡單的登錄,退出功能。展示從一無所知,到使用這個技術(shù)處理簡單需求的全過程。

開始

我們知道,Spring的社區(qū)支持特別完善,Spring全家桶的文檔特別好,那么我們話不多說,打開Spring Security 官網(wǎng)看一下。

看完這個圖片我們明白了,得創(chuàng)建一個SpringBoot工程,構(gòu)建工具我們選擇常用的maven,然后引入SpringSecurity的starter即可,當(dāng)然為了測試引入SpringSecurity之后訪問接口的變化,我們要引入web的starter,就像是SpringBoot入門時候一樣

不引入Spring Security訪問接口

創(chuàng)建SpringBoot工程,這個太簡單了,不過多贅述

<?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 https://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.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.nightcat</groupId>
    <artifactId>security</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>security</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-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-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>
package com.nightcat.security.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello Security";
    }
}

把項目啟動起來,之后輸入localhost:8080/hello,就會看到瀏覽器顯示helloSecurity。

引入Spring Security訪問接口

其實所有的安全管理框架,需要解決的就是兩件事,認證和鑒權(quán),認證是判斷用戶是不是當(dāng)前系統(tǒng)的用戶,不是就不讓他用系統(tǒng),鑒權(quán)簡單理解就是,有權(quán)限訪問系統(tǒng)的哪些部分,比如有些功能你要登錄之后才能用,有些功能是內(nèi)部人員可用,即根據(jù)角色分配權(quán)限,根據(jù)權(quán)限分配可用范圍。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>

加入SpringSecurity依賴。

這個時候,如果再訪問 hello接口,就會出現(xiàn)一個頁面,讓咱們登錄。

可是到目前為止,我們根本不知道用戶名和密碼,更不知道這個頁面從哪來的,我們目前的項目里,沒有自己寫任何頁面。沒辦法,繼續(xù)看文檔。

我們的工程是Servlet工程,看看文檔是怎么寫的。

在快速上手章節(jié)有一個Spring Boot Auto Configuration,文檔寫的非常明白,主要做了三件事

①創(chuàng)建了一個SpringSecurityFilterChain

②創(chuàng)建了一個UserDetailsService,用戶名是user ,一個隨機的密碼是在控制臺打印出來了。

③把 SpringSecurityFilterChain,注冊到Web容器里,每個請求都經(jīng)過它

好了,看到第二條,我們就能登錄了。

文檔中提到了,每次隨機生成一個密碼供用戶登錄使用,我們先來看看那個密碼長什么樣子:

Using generated security password: caab29d4-b177-4fa7-85e2-f23a1f6246cf

這個密碼顯然不是我們想要的,總不能每次啟動項目,都生成一個新的密碼,而且用戶名也不可能都叫做user,我們希望能自己定制用戶名和密碼。我們現(xiàn)在并不知道該怎么做。繼續(xù)讀文檔。

我們來看看SpringSecurity給我們提供的例子:Spring Security 例子

我們看到了,SpringSecurity提供的例子,有199次提交,我們找到最開始的幾次提交記錄??纯此甲隽耸裁础?/p>

找到了

那我們照葫蘆畫瓢,把中間的用戶名和密碼改一下,然后登錄。

package com.nightcat.security.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
                .username("zhangsan")
                .password("123")
                .roles("USER")
                .build();
        return new InMemoryUserDetailsManager(user);
    }
}

好了,剩下的東西我們先本著不求甚解,一步步來的原則,先看看zhangsan/123能不能登錄。

我這里直接給結(jié)論吧,不再截圖,是可以登錄的,并且每次都是這個用戶名和密碼。

退出登錄

我們實現(xiàn)了登錄,退出登錄怎么做呀?我們不知道引入SpringSecurity之后怎么做,還是看它的例子,我們發(fā)現(xiàn)它并沒有編寫退出登錄的接口,我們以前的常規(guī)操作就是,點擊按鈕然后把當(dāng)前登錄人從Session中remove掉就行了。那SpringSecurity是怎么做的呢?繼續(xù)看它的例子。

我們雖然沒有找到它處理退出邏輯的自定義接口,但是我們發(fā)現(xiàn)它的頁面中url是/logout,那么我們直接嘗試一下從瀏覽器輸入這個url

哎呦,還真的可以,點擊logout就退出了。

后記

剛開始學(xué),我們不用對自己要求太高,應(yīng)該掌握一種思路,如何上手新技術(shù),完成最最簡單的功能再一步步迭代。這里留了很多坑,比如角色權(quán)限的配置,比如集成數(shù)據(jù)庫,比如用戶策略這些,比如我們要在退出的時候?qū)崿F(xiàn)一些邏輯再退出,其實我自己也不會,都需要一步步去學(xué)習(xí),我們應(yīng)該掌握方法,消除對陌生技術(shù)的恐懼感。

到此這篇關(guān)于Spring Security十分鐘入門教程的文章就介紹到這了,更多相關(guān)Spring Security內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud Netflix架構(gòu)淺析(小結(jié))

    Spring Cloud Netflix架構(gòu)淺析(小結(jié))

    這篇文章主要介紹了Spring Cloud Netflix架構(gòu)淺析(小結(jié)),詳解的介紹了Spring Cloud Netflix的概念和組件等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Java實現(xiàn)五子棋的基礎(chǔ)方法

    Java實現(xiàn)五子棋的基礎(chǔ)方法

    這篇文章主要為大家詳細介紹了Java實現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • java中break和continue區(qū)別及使用場合分析

    java中break和continue區(qū)別及使用場合分析

    本文力圖通過實例加使用場合詳解來引導(dǎo)菜鳥重新認識break和continue語句,需要的朋友可以參考下
    2014-01-01
  • Springboot項目啟動成功后可通過五種方式繼續(xù)執(zhí)行

    Springboot項目啟動成功后可通過五種方式繼續(xù)執(zhí)行

    本文主要介紹了Springboot項目啟動成功后可通過五種方式繼續(xù)執(zhí)行,主要包括CommandLineRunner接口,ApplicationRunner接口,ApplicationListener接口,@PostConstruct注解,InitalizingBean接口,感興趣的可以了解一下
    2023-12-12
  • JAVA實現(xiàn)簡單系統(tǒng)登陸注冊模塊

    JAVA實現(xiàn)簡單系統(tǒng)登陸注冊模塊

    這篇文章主要介紹了一個簡單完整的登陸注冊模塊的實現(xiàn)過程,文章條理清晰,在實現(xiàn)過程中加深了對相關(guān)概念的理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-07-07
  • 淺談SpringSecurity基本原理

    淺談SpringSecurity基本原理

    今天帶大家了解一下SpringSecurity的基本原理,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 詳解Java中日志跟蹤的簡單實現(xiàn)

    詳解Java中日志跟蹤的簡單實現(xiàn)

    MDC?(Mapped?Diagnostic?Context,映射調(diào)試上下文)是?log4j??、logback及l(fā)og4j2??提供的一種方便在多線程條件下記錄日志的功能。本文將利用MDC實現(xiàn)簡單的日志跟蹤,需要的可以參考一下
    2022-08-08
  • 如何使用 Shell 腳本查看多個服務(wù)器的端口是否打開的方法

    如何使用 Shell 腳本查看多個服務(wù)器的端口是否打開的方法

    這篇文章主要介紹了如何使用 Shell 腳本來查看多個服務(wù)器的端口是否打開的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • java list中包含某個字符串的兩種方法實現(xiàn)

    java list中包含某個字符串的兩種方法實現(xiàn)

    在Java開發(fā)中,經(jīng)常需要判斷一個List中是否包含特定的字符串,包括使用contains()方法和循環(huán)遍歷判斷,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java Annotation注解相關(guān)原理代碼總結(jié)

    Java Annotation注解相關(guān)原理代碼總結(jié)

    這篇文章主要介紹了Java Annotation注解相關(guān)原理代碼總結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07

最新評論