首页 > 其他分享 >创建SpringSecurity项目

创建SpringSecurity项目

时间:2023-04-04 13:48:30浏览次数:38  
标签:SpringBoot 项目 创建 boot springframework SpringSecurity 密码 spring org

一. 搭建SpringBoot开发环境

我们的Spring Security系列教程会基于SpringBoot环境,并且以案例迭代的方式进行开发,所以为了方便后续案例的编写,我们先提前搭建一个SpringBoot环境的Web项目。

1. 创建SpringBoot项目

如各位对SpringBoot基础不熟悉,请参考本人的SpringBoot系列教程:

blog.csdn.net/syc000666/a…

SpringBoot项目的具体创建过程如下图所示。

1.1 创建一个基于Maven的Project项目。


1.2 设置项目名称和存储位置

2. 添加项目依赖

在pom.xml文件中,添加配置SpringBoot开发环境的依赖包。

<properties>
    <java.version>1.8</java.version>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <spring-boot.version>2.2.5.RELEASE</spring-boot.version>
    <spring-platform.version>Cairo-SR3</spring-platform.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

        <!--BOM(bill of materials):材料清单,用于解决jar包依赖的好方法-->
            <!--缘起:Spring现在已发展成一个庞大体系。比如security、mvc等。如此一来,不同模块或者与外部进行集成时,
            依赖处理就需要各自对应版本号。比如,较新spring与较老的quartz,它们集成就会遇到问题,给搭建和升级带来不便。
            因此Spring IO Platform应运而生,只要项目中引入了它,外部集成时依赖关系无需版本号。-->
        <dependency>     
             <groupId>io.spring.platform</groupId>
             <artifactId>platform-bom</artifactId>
             <version>${spring-platform.version}</version>
             <type>pom</type>
             <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

    <dependencies>
        <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>

    <!--配置中央仓库-->
    <repositories>
        <repository>
            <id>aliyun-repos</id>
            <url>https://maven.aliyun.com/repository/public</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
</repositories>
复制代码

添加完SpringBoot中主要的依赖包之后,我们就可以在这个环境中进行Web项目开发了。

二. 创建第一个SpringSecurity项目

我们在上面的SpringBoot开发环境中,创建出第一个SpringSecurity模块,具体创建过程略(嘿嘿)。

1. 添加模块中的pom依赖

我们在该module中,添加项目开发时必要的依赖包,主要是添加SpringSecurity的依赖包,在这里会完美体现SpringBoot中”约定大于配置“的思想哦。

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

   <!--核心安全依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
复制代码

2. 创建web接口

接下来我们随便编写一个web接口,方便后面进行测试。

package com.yyg.security.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {

        return "Hello, 来跟 一一哥 学习 Spring Security吧!";
    }

}
复制代码

3. 创建项目入口类

package com.yyg.security;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Demo01Application {

    public static void main(String[] args) {

        SpringApplication.run(Demo01Application.class, args);
    }

}
复制代码

4. 项目目录结构

此时我们的项目包结构如下图所示:

5. 启动项目

我们把项目启动起来后,在浏览器中对Web接口进行访问,会发现接口是无法直接访问的。在访问接口之前会自动跳转到"/login"地址,进入到一个登录界面。这是因为Spring Boot中"约定大约配置"的规则,只要我们添加了Spring Security的依赖包,就会自动开启安全限制,在访问Web接口之前会进行安全拦截。只有输入了用户名和密码,才能访问项目中的Web接口。

此时登录界面中,要求我们输入用户名和密码。这个默认的用户名是“user”,密码是一个用UUID生成的随机字符串。在每次启动项目时,都可以在控制台中看到生成的随机密码,如下图所示:

6. 随机密码生成机制

可能有小伙伴会很好奇,这个随机的密码到底是在哪里生成的呢? 带各位分析一下Spring Security的源码,来看看这个密码的生成策略。这个默认的用户名和密码其实是在SecurityProperties类中定义的,源码如下图:

而控制台上打印的密码日志,是在UserDetailsServiceAutoConfiguration类的getOrDeducePassword()方法中输出的。

 

我们只要把这个随机密码,复制粘贴到登录页面的密码框中,就可以访问"/hello"接口了。

 

7. 配置Security账户

从上面的源码分析可知,默认的登录密码是利用UUID生成的随机字符串,很明显如果我们使用这个字符串作为登录密码,就太麻烦了。那么有没有更方便的登录账户呢?作为一个框架,我可以很负责的告诉各位,这肯定是有的!

所以Security框架允许我们自己配置用户名和密码,并且提供了2种方式来进行自定义用户名和密码:

  • ①. 在配置文件中定义;
  • ②. 在配置类中定义。

7.1 配置用户信息

在本案例中 一一哥 带各位采用配置文件的方式来进行实现,首先我们创建一个application.yml配置文件,配置如下:

spring:
  security:
    user:
      name: yyg
      password: 123
复制代码

7.2 setPassword()源码分析

在这里配置了自定义的用户名和密码后,在Spring Security的源码中,会通过调用SecurityProperties的 set()方法 注入到对应的属性中。我们来看下 SecurityProperties.User#setPassword() 方法的源码:

 

由此我们可以看到,passwordGenerated属性变成了false,结合上文的源码分析,我们就知道在控制台不会再输出打印密码信息了。

8. 重启项目

接着我们重启项目,这时候利用我们自己配置的用户名和密码,就可以访问"/hello"接口了。

 

这样我们只需要添加一个security的依赖包,就可以实现Web安全控制了。

 

标签:SpringBoot,项目,创建,boot,springframework,SpringSecurity,密码,spring,org
From: https://www.cnblogs.com/qian-fen/p/17286107.html

相关文章

  • pod的创建流程
    我们知道kubectl是直接操作APIServer的,所以就相当于把我们的清单提交给了APIServer,然后集群获取到清单描述的应用信息后存入到etcd数据库中,然后kube-scheduler组件发现这个时候有一个Pod还没有绑定到节点上,就会对这个Pod进行一系列的调度,把它调度到一个最合适的节点......
  • 一个简单的rust项目贪吃蛇
    一个贪吃蛇游戏的rust实现,使用了piston_window和randcrate。游戏使用上下左右方向键进行操控,使用R重置游戏,使用P进行暂停/启动。项目结构·├──Cargo.lock├──Cargo.toml├──src/│  ├──main.rs│  ├──snake_game/│  │ ├─......
  • SpringBoot之使用IDEA新建Web项目
    1.打开IDEA,点击左上角的File选项,打开菜单选择New,再打开菜单选择Project2.选择SpringInitializr,输入或选择项目相关的信息3.选择SpringBoot版本以及相应的依赖,并点击右下角的Create按钮进行项目创建4.项目创建完成后,点击左上角的File选项,打开菜单选择Settings选......
  • Excel 如何计算项目完成时间占全年百分比 - 小技巧
    一、新建“项目记录表”数据表,含有“项目名称”、“开始时间”及“结束时间”等信息,我们现在需要计算出项目所需要的时间占全年的百分比。如图所示二、单击选中“结束时间”右边的单元格并输入“占全年时间的百分比”,然后按住鼠标左键往下拉到表格底部。选中该列,如图所示:三......
  • VSCode打开Vue项目
    打开VSCode                                                                       打开文件夹并选择vue的文件夹  ......
  • 信息系统项目管理师第四版知识摘编:第17章 项目干系人管理​
    第17章项目干系人管理项目干系人管理包括识别能够影响项目或会受项目影响的人员、团体或组织,分析干系人对项目的期望和影响,制定管理策略有效调动干系人参与项目决策和执行。17.1管理基础17.1.1管理的重要性每个项目都有干系人,他们会受到项目积极或消极的影响,或者能对项目施加积极......
  • Java使用IntelliJ IDEA配置Maven并管理一个webapp项目
    1、下载并安装Mavenapache官网地址:http://maven.apache.org/download.cgips:maven的使用是基于JDK的,所以电脑必须有JDK解压到文件夹,并配置环境变量。1、MAVEN_HOME,地址为maven的地址2、path,地址为%MAVEN_HOME%\binwin+r输入cmd进终端,输入mvn-v测试maven是否安装成功修改maven......
  • Java使用IntelliJ IDEA创建JavaWeb应用程序并配置Tomcat
    1、创建JavaWeb程序创建一个JavaEE项目,选择Web应用程序。创建好后结果如下2、添加Tomcat服务器首先在官网下载Tomcat对应的操作系统版本。https://tomcat.apache.org/右上角添加Tomcat服务器在服务器里选择本地的Tomcat地址,其他的默认。在部署里点击加号,选择Artifact工件,增加web......
  • 【软考】信息系统项目管理师,考试大纲与历年考点分析,学习方法(2021版)
    序信息系统项目管理师,考试大纲与历年考点分析,学习方法(2021版)1、顺序因为内容量,考试大纲>历年考点>学习方法但是使用频率却是,学习方法>历年考点>考试大纲所以本文放置的顺序倒了一下,按照频率摆放章节。2、说明本文仅供个人学习备考期间使用,数据来源是江山老师的2021年已经考......
  • IDEA:如何导入maven项目,以及启动项目,关闭项目等操作
    导入Maven项目操作一:导入项目(情况一)IDEA没有打开过其他项目打开IDEA,选择Open,找到项目位置,选择项目根目录(情况二)IDEA已经打开过其他的项目打开IDEA,选择file,选择open,找到项目位置,选择项目根目录         其他操作上述两种情况均......