将代码传到gitee(码云) spring security框架的作用

使用cmd窗口讲 代码进行上传到gitee(码云)

请添加图片描述

gitee的上传

首先,先在idea的plugin里下载gitee这个插件
在这里插入图片描述

在进行下一步,这里 的邮箱必须要和gitee进行绑定不然会发生报错,无法进行添加 , 最后点击apply右下角的apply

在这里插入图片描述

创建并配置本地库

vcs版本控制 vreate Git resporty 创建本地库

在这里插入图片描述

这里的目录是一个空目录

在这里插入图片描述

在将创建的工程放到gitee的目录中

在这里插入图片描述

在这时候工程不会再idea中显示这是需要导入

在这里插入图片描述

下面开始一步一步的进行操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

选择工程 ----右键-----Git----add
在这里插入图片描述

第一种版本

在这里插入图片描述

上面的Git test 就会在下面的红色方框内出现

在这里插入图片描述

第二种版本

在这里插入图片描述

spring security框架

背景分析

企业中数据是最重要的资源,对于这些数据而言,有些可以直接匿名访问,有些只能登录以后才能访问,还有一些你登录成功以后,权限不够也不能访问.总之这些规则都是保护系统资源不被破坏的一种手段.几乎每个系统中都需要这样的措施对数据(资源)进行保护.我们通常会通过软件技术对这样业务进行具体的设计和实现.早期没有统一的标准,每个系统都有自己独立的设计实现,但是对于这个业务又是一个共性,后续市场上就基于共享做了具体的落地实现,例如Spring Security,Apache shiro诞生了.

为什么使用Spring security

1)功能强大,在Springboot诞生之后在配置方面做了大量的强化
2). Spring security的加密方式;使用(bcrypt)这个对象,底层使用随机盐(随机产生数字或者字符串对密码进行加密)的方式,对密码进行hash不可逆(只能进行加密,几乎不能破解)加密
md5和Spring security加密的区别:
md5中相同的密码底层加密的hash是相同的 ; 而Spring security即使相同的密码加密的hash加密也是不相同的

md5的代码测试


package com.cy.jt;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.util.DigestUtils;

@SpringBootApplication
public class Md5Tests {
     @Test
     void testMd5Enode(){
         //1.定义密码,盐
         String password="123456";
         //此处的字符串可以是随机写, 只要密码和盐相同hash就相同
         String salt="www.tedu.cn";
         //2.创建加密对象,对密码和盐进行不可逆hash加密
         //md5算法对相同内容加密时都是相同的,并且不可逆
         //md5算法对不同内容加密可能会出现相同结果吗?(可能,但几率很小)
         String pwd=
         DigestUtils.md5DigestAsHex((password+salt).getBytes());
         //3.输出加密后的密码
         System.out.println(pwd);
         //1f6d4c93751108d06b6759c2bc353a34
         //1f6d4c93751108d06b6759c2bc353a34
         System.out.println(pwd.length());//32位
         /**说明:实际项目中md5盐要存储在数据库,登录时会基于用户名,将用户信息查询出来,
         并基于属于的密码和数据库查询出盐进行hash md5加密,再与数据库存储的密码进行
         比对,比对结果正确,则允许登录*/
     }
}

Spring security的代码测试


package com.cy.jt;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@SpringBootTest
public class BrcyptTests {

    @Test
    void testBrcyptEncode(){
       //1.定义一个密码
        String password="123456";
       //2.定义加密对象
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
       //3.对密码进行加密(对密码基于随机盐进行hash不可逆加密)
        String newPwd=encoder.encode(password);
        System.out.println(newPwd);//输出加密结果
        System.out.println(newPwd.length());//60位长度
       //4.对密码进行匹配测试(匹配时底层会对密码再次进行加密)
        boolean flag=encoder.matches(password,newPwd);
        System.out.println("flag="+flag);
    }
}


认证授权分析

用户在进行资源访问时,要求系统要对用户进行权限控制,其具体流程如图所示:

在这里插入图片描述

Spring Security 概述

Spring Security 是一个企业级安全框架,由spring官方推出,它对软件系统中的认证,授权,加密等功能进行封装,并在springboot技术推出以后,配置方面做了很大的简化.市场上现在的分布式架构下的安全控制正在逐步的转向Spring Security.

Spring Security 基本架构

Spring Security 在企业中实现认证和授权业务时,底层构建了大量的过滤器.

在这里插入图片描述

其中:

绿色部分为认证过滤器,需要我们自己配置,也可以配置过个认证过滤器.也可以使用Spring Security提供的默认认证过滤器.黄色部分为授权过滤器.Spring Security就是通过这些过滤器然后调用相关对象一起完成认证和授权操作.

工程代码的创建

在这里插入图片描述

pom.xml文件

<?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>
        <artifactId>spring-boot-starter-parent</artifactId>
        <groupId>org.springframework.boot</groupId>
        <version>2.3.2.RELEASE</version>
    </parent>

    <groupId>com.cy</groupId>
    <artifactId>02-jt-spring-security</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </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-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
</project>


创建配置文件

在resources目录下创建application.yml文件,并指定服务端口


server:
   port: 8080


创建项目启动类


package com.cy.jt;

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

@SpringBootApplication
public class SpringSecurityApplication {
    public static void main(String[] args) {
        SpringApplication.run( SpringSecurityApplication.class, args);
    }
}


运行启动类访问测试

第一步:检查控制输出,是否自动生成了一个密码,例如:


Using generated security password: 360123aa-df93-4cd9-bab4-5212af421d2c

执行的结果为下面的网页

这里的 密码将上面的密文粘贴复制即可
在这里插入图片描述

在登录窗口中输入用户名user(系统默认),密码(服务启动时,控制台默认输出的
密码),然后点击Sign in进行登录,登录成功默认会出现,如下界面:
在这里插入图片描述

由于不能直接输入密文所以可以根据配置文件进行配置密码

编辑登录成功页面(.html文件)

在项目的resources目录下创建static目录,并在此目录创建一个index.html文件,例如:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
  <h1>Login Ok</h1>   #login OK是页面登录成功之后展现的内容
</body>
</html>



配置登录密码

第一步:编写一个方法(可以在启动类中调用执行),对一个名文进行加密,在application.xml中的代码 , 例如:


server:
  port: 8080
spring:
  security:
    user:
      name: jack
     # password: 123456   #这种密码太简单  {这是一种解密的算法}
      password: '{bcrypt}$2a$10$FprzGGDTUpXnjfc2VDCnLu6nK8txd9Pxadjdbgdb5knV5Kwmscn36'



在test(测试)类中的代码


package springbootrun;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

@SpringBootApplication
public class RunApp {
    public static void main(String[] args) {
        SpringApplication.run(RunApp.class, args);
        //此为加密比md5加密要强最终要的一点就是相同的密码也会有不同的密文
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        encodePwd();
    }

    static void encodePwd(){
        BCryptPasswordEncoder encoder=new BCryptPasswordEncoder();
        String password="123456";//明文
        String newPwd=encoder.encode("123456");
        System.out.println(newPwd);//$2a$10$fahHJIe3SJm3KcyiPPQ2d.a2qR029gB3qKHrKanQ87u.KbtZ6Phr.
    }
}



访问的页面

在这里插入图片描述

登录成功后进入的页面

在这里插入图片描述

其中,{bcrypt}指定了密码加密时使用的算法

第三步:启动服务,重新进行登录测试.

Spring Security 认证实践
Spring Security 授权实践






总结

创建空工程
配置工程(jdk, maven,utf-8)
创建module
添加依赖junit(单元测试)
安装gitee插件
创建本地库(那些事不用上传,一般为空工程的所在位置),配置那些文件不用上传,该文件在.gitee/info/exclude
将项目添加到缓存区提交到本地仓库,分享到远程仓库

常见问题(FAQ)关于gitee

1):gitee的密码忘了
2):项目分享到gitee平台上失败(项目名称,输入的邮箱最好不要有数字的账号)
3):倒入新项目要配置环境(jdk,maven路径)

bug的错误分析

在pom文件中的project标签 中有报错

1):可能有嵌套问题
2):依赖下载不完整
在这里插入图片描述

idea缓存file----->invaildate caches/restart
在这里插入图片描述

在该地方(maven)有红线,首先确定maven是否配置正确;
在这里插入图片描述

导入的Maven项目在maven区没有显示
在这里插入图片描述

说明,假如连maven区都没有,例如

在这里插入图片描述

FAQ 分析


如何理解认证?(判定用户身份的合法性)
如何校验用户身份的合法性?(用户密码,指纹,刷脸,刷身份证,)
如何进行身份认证?(自己写认证逻辑,借助框架去写认证逻辑-尊重框架规则)
市场上的认证和授权框架有哪些?(SpringSecurity,Shiro)
为什么会选择SpringSecurity?(功能强大,SpringBoot诞生后在配置方面做了大量的简化)
SpringSecurity中的加密方式你用的什么?(Bcrypt,底层基于随机盐方式对密码进行hash不可逆加密,更加安全,缺陷是慢)
SpringSecurity中你用过哪些API?(BcryptPasswordEncoder,UserDetailService,UserDetail,User,
AuthenticationSuccessHandler,AuthenticationFailureHandler,)
为什么要进行权限控制?(防止非法用户破坏数据)
SpringSecurity进行权限控制的步骤(@EnableGlobalMethodSecurity,@PreAuthorize)
SpringSecurity在进行认证和授权时可能出现的异常?
SpringSecurity在未认证和未授权的前提下访问授权资源时,出现的异常如何处理?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值