【Java-框架-SpringSecurity】单点登录(认证和授权)- 随笔

项目文件;

【1】

预览

在这里插入图片描述

文件

文件01

名称

  • pom.xml

内容

  • (01)总的

    <?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.5.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>SpringDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringDemo</name><description>Demo project for Spring Boot</description><properties><java.version>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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
    </project>
    
  • (02)依赖1

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
  • (03)依赖2

    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
    </dependency>
    
文件02

名称

  • DemoController.java

内容

  • (01)总的

    package com.example.springdemo.controller;import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;@RestController
    public class DemoController {@GetMapping("demo_a")public String demo_a() {System.out.println("【DemoController.demo_a】......");return "This is demo_a method......";}@GetMapping("demo_b")public String demo_b() {System.out.println("【DemoController.demo_b】......");return "This is demo_b method......";}}
    
  • (02)方法1

    @GetMapping("demo_a")
    public String demo_a() {System.out.println("【DemoController.demo_a】......");return "This is demo_a method......";
    }
    
  • (03)方法2

    @GetMapping("demo_b")
    public String demo_b() {System.out.println("【DemoController.demo_b】......");return "This is demo_b method......";
    }
    

【2】

预览

在这里插入图片描述

文件

文件01

名称

  • pom.xml

内容

  • (01)总的

    <?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.5.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>SpringDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringDemo</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version></dependency><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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
    </project>
    
  • (02)依赖1

    <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version>
    </dependency>
    
文件02

名称

  • application.properties

内容

  • (01)总的

    # 开启Knife4j增强模式
    knife4j.enable=true
    
文件03

名称

  • Knife4jConfiguration.java

内容

  • (01)总的

    package com.example.springdemo.config;import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import springfox.documentation.builders.ApiInfoBuilder;
    import springfox.documentation.builders.PathSelectors;
    import springfox.documentation.builders.RequestHandlerSelectors;
    import springfox.documentation.service.ApiInfo;
    import springfox.documentation.service.Contact;
    import springfox.documentation.spi.DocumentationType;
    import springfox.documentation.spring.web.plugins.Docket;
    import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;/*** Knife4j配置类** @author SUNxRUN*/
    @Configuration
    @EnableSwagger2WebMvc
    public class Knife4jConfiguration {/*** 【重要】指定Controller包路径*/private String basePackage = "com.example.springdemo.controller";/*** 分组名称*/private String groupName = "略";/*** 【主页】题目*/private String title = "在线API文档";/*** 【主页】简介*/private String description = "前后交互";/*** 【主页】作者*/private String contactName = "SUNxRUN";/*** 【主页】版本*/private String version = "1.0.0";/*** 【主机】host*/private String host = "http://localhost:9081";/*** 【主页】服务URL*/private String termsOfServiceUrl = "http://www.apache.org/licenses/LICENSE-2.0";/*** 联系网址*/private String contactUrl = "略";/*** 联系邮箱*/private String contactEmail = "略";@Autowiredprivate OpenApiExtensionResolver openApiExtensionResolver;public Knife4jConfiguration() {System.out.println("【配置类】Knife4jConfiguration-----已运行");}@Beanpublic Docket docket() {String groupName = "1.0.0";Docket docket = new Docket(DocumentationType.SWAGGER_2).host(host).apiInfo(apiInfo()).groupName(groupName).select().apis(RequestHandlerSelectors.basePackage(basePackage)).paths(PathSelectors.any()).build().extensions(openApiExtensionResolver.buildExtensions(groupName));return docket;}private ApiInfo apiInfo() {return new ApiInfoBuilder().title(title).description(description).termsOfServiceUrl(termsOfServiceUrl).contact(new Contact(contactName, contactUrl, contactEmail)).version(version).build();}}
    

【3】

预览

在这里插入图片描述

文件

文件01

名称

  • pom.xml

内容

  • (01)总的

    <?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.5.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>SpringDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringDemo</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version></dependency><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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
    </project>
    
  • (02)依赖1

    <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
    </dependency>
    
文件02

名称

  • JwtTests.java

内容

  • (01)总的

    package com.example.springdemo;import io.jsonwebtoken.Claims;
    import io.jsonwebtoken.Jwts;
    import io.jsonwebtoken.SignatureAlgorithm;
    import org.junit.jupiter.api.Test;import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;public class JwtTests {@Testpublic void testGenerateJwt() {// 准备`claims`Map<String, Object> claims = new HashMap<>();claims.put("id", 1);claims.put("name", "SUNxRUN");// 准备`过期时间(设置:10年)`Date expirationDate = new Date(System.currentTimeMillis() + 525600 * 10 * 60 * 1000);// 准备`密钥`String secretKey = "1234567890";// JWT的组成部分:Header(头)、Payload(载荷)、Signature(签名)String jwt = Jwts.builder()// Header:用于配置算法与此结果数据的类型// 通常配置两个属性:tye(类型)、alg(算法).setHeaderParam("typ", "jwt").setHeaderParam("alg", "HS256")// Payload:用于配置需要封装到JWT中的数据.setClaims(claims).setExpiration(expirationDate)// Signature:用于指定算法与密钥(盐).signWith(SignatureAlgorithm.HS256, secretKey).compact();System.out.println(jwt);}@Testpublic void testParseJwt() {// `密钥`String secretKey = "1234567890";// `JWT`String jwt = "eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiU1VOeFJVTiIsImlkIjoxLCJleHAiOjE3MDc0NzcyNDR9.stHmCODCatUhNQ6M9_tYQfR4ay0rRd0wQIMZgYXKyhY";Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();Object id = claims.get("id");System.out.println("id=" + id);Object name = claims.get("name");System.out.println("name=" + name);}}
    
  • 方法1

    @Test
    public void testGenerateJwt() {// 准备`claims`Map<String, Object> claims = new HashMap<>();claims.put("id", 1);claims.put("name", "SUNxRUN");// 准备`过期时间(设置:10年)`Date expirationDate = new Date(System.currentTimeMillis() + 525600 * 10 * 60 * 1000);// 准备`密钥`String secretKey = "1234567890";// JWT的组成部分:Header(头)、Payload(载荷)、Signature(签名)String jwt = Jwts.builder()// Header:用于配置算法与此结果数据的类型// 通常配置两个属性:tye(类型)、alg(算法).setHeaderParam("typ", "jwt").setHeaderParam("alg", "HS256")// Payload:用于配置需要封装到JWT中的数据.setClaims(claims).setExpiration(expirationDate)// Signature:用于指定算法与密钥(盐).signWith(SignatureAlgorithm.HS256, secretKey).compact();System.out.println(jwt);
    }
    
  • 方法2

    @Test
    public void testParseJwt() {// `密钥`String secretKey = "1234567890";// `JWT`String jwt = "eyJ0eXAiOiJqd3QiLCJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoiU1VOeFJVTiIsImlkIjoxLCJleHAiOjE3MDc0NzcyNDR9.stHmCODCatUhNQ6M9_tYQfR4ay0rRd0wQIMZgYXKyhY";Claims claims = Jwts.parser().setSigningKey(secretKey).parseClaimsJws(jwt).getBody();Object id = claims.get("id");System.out.println("id=" + id);Object name = claims.get("name");System.out.println("name=" + name);
    }
    

【4】

预览

在这里插入图片描述

文件

文件01

名称

  • pom.xml

内容

  • (01)总的

    <?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.5.9</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>SpringDemo</artifactId><version>0.0.1-SNAPSHOT</version><name>SpringDemo</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>2.0.9</version></dependency><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></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
    </project>
    
  • (02)依赖1

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

【5】

预览

在这里插入图片描述

文件

文件01

名称

  • BCryptTests.java

内容

  • (01)总的

    package com.example.springdemo;import org.junit.jupiter.api.Test;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;public class BCryptTests {@Testpublic void testBCrypt() {BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String rawPassword = "123456";String encodedPassword = passwordEncoder.encode(rawPassword);System.out.println(encodedPassword);}}
    
  • (02)方法1

    @Test
    public void testBCrypt() {BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();String rawPassword = "123456";String encodedPassword = passwordEncoder.encode(rawPassword);System.out.println(encodedPassword);
    }
    
文件02

名称

  • UserDetailsServiceImpl.java

内容

  • (01)总的

    package com.example.springdemo.security;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.core.userdetails.UsernameNotFoundException;
    import org.springframework.stereotype.Service;@Service
    public class UserDetailsServiceImpl implements UserDetailsService {@Overridepublic UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {System.out.println("`Spring Security`会自动根据用户名查询用户详情!【用户名】:" + s);if ("LinShiYongHu".equals(s)) {UserDetails userDetails = User.builder().username("LinShiYongHu").password("$2a$10$sgbF5BycuObR79id8Y08U.Mg.YAMJCU2TPBqzSUqu5zg401iGMUcu") // 密码:123456.disabled(false) // 账号是否禁用.accountLocked(false) // 账号是否锁定.accountExpired(false) // 账号是否过期.authorities("权限信息,暂不处理!") // 账号的权限信息.build();return userDetails;}return null;}}
    
  • (02)方法1

    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {System.out.println("`Spring Security`会自动根据用户名查询用户详情!【用户名】:" + s);if ("LinShiYongHu".equals(s)) {UserDetails userDetails = User.builder().username("LinShiYongHu").password("$2a$10$sgbF5BycuObR79id8Y08U.Mg.YAMJCU2TPBqzSUqu5zg401iGMUcu") // 密码:123456.disabled(false) // 账号是否禁用.accountLocked(false) // 账号是否锁定.accountExpired(false) // 账号是否过期.authorities("权限信息,暂不处理!") // 账号的权限信息.build();return userDetails;}return null;
    }
    
文件03

名称

  • SecurityConfiguration.java

内容

  • (01)总的

    package com.example.springdemo.config;import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
    import org.springframework.security.crypto.password.PasswordEncoder;@Configuration
    public class SecurityConfiguration {@Beanpublic PasswordEncoder passwordEncoder() {System.out.println("创建密码编辑器组件:BCryptPasswordEncoder......");return new BCryptPasswordEncoder();}}
    
  • (02)方法1

    @Bean
    public PasswordEncoder passwordEncoder() {System.out.println("创建密码编辑器组件:BCryptPasswordEncoder......");return new BCryptPasswordEncoder();
    }
    

【6】

在这里插入图片描述

【7】

在这里插入图片描述

【8】

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/427575.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现两因素独立设计方差分析,简单效应分析

# Python实现两因素独立设计方差分析 1. 背景 1. 有研究者探讨了在不同企业文化下&#xff0c;管理者的不同语言风格所产生的影响 有的企业注重员工的独立性&#xff0c;强调个人努力和内部竞争&#xff1b;有的企业注重员工的整体性&#xff0c;强调团队合作和团队绩效。 …

数据结构·单链表

不可否认的是&#xff0c;前几节我们讲解的顺序表存在一下几点问题&#xff1a; 1. 中间、头部的插入和删除&#xff0c;需要移动一整串数据&#xff0c;时间复杂度O(N) 2. 增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗 3. 增容一般是2倍的增…

Linux——理解文件系统

目录 1、inode 2、硬链接、软链接 理解硬链接 软链接 3、静态库、动态库 静态库与动态库 生成静态库 生成动态库 使用动态库 运行动态库 使用外部库 库文件名称和引入库的名称 1、inode 使用ls -l命令不仅显示出了文件名&#xff0c;也可以显示出文件元数据 一行…

Spring 的 IOC 和 AOP

题目 Spring 的 IOC 和 AOP 推荐解析 IOC 是什么&#xff1f; IoC&#xff08;Inversion of Control&#xff09; 控制反转&#xff0c;是一种常见的设计思想&#xff0c;主要就是将手动创建对象的控制权&#xff0c;交给 Spring 框架来管理。 为什么需要存在一个容器&…

MVC模式

Model-View-Controller : 模型-视图-控制器模式&#xff0c;用于应用程序的分层开发。 Model(模型)&#xff1a;代表一个存取数据的对象。也可以带有逻辑&#xff0c;在数据变化时更新控制器。 View(视图)&#xff1a;代表模型包含的数据的可视化。 Controller(控制器)&#xf…

Nuxt3:/_nuxt/xxx.mjs请求502问题引发的_nuxt实际指向探究

一、问题描述 今天后台的小伙伴给我发了一张图&#xff1a; 根据图中提示&#xff0c;应该是在请求某个/_nuxt/xxx.mjs的时候报错了&#xff0c;如果单独在浏览器访问该文件路径也是能访问到的&#xff0c;那有可能就是访问量比较大&#xff0c;服务器响应不过来导致的&#x…

数组A[m+n]中存放了两个线性表(a1,a2,.....am)和(b1,b2.....bn),将数组中的两个线性表的位置互换,要求空间复杂度为1

要求空间复杂度为O(1)&#xff0c;那么不可以借助辅助数组来完成此操作 算法思路&#xff1a;可先将此数组逆置变成bn,......b1,am,....,a1&#xff0c;然后分别逆转两个线性表的数据元素 算法实现 1、定义一个函数&#xff0c;该函数的功能是可以对一个数组的任意连续的部分进…

JS之打地鼠案例

需要素材的同学可以私信我 效果图&#xff1a; 上代码&#xff1a; <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title><style>* {margin: 0;padding: 0;}.box {position: relative;width: 320px;heigh…

DAY08_SpringBoot—整合Mybatis-Plus

目录 1 MybatisPlus1.1 MP介绍1.2 MP的特点1.3 MybatisPlus入门案例1.3.1 导入jar包1.3.2 编辑POJO对象1.3.3 编辑Mapper接口1.3.4 编译YML配置文件1.3.5 编辑测试案例 1.4 MP核心原理1.4.1 需求1.4.2 原理说明1.4.3 对象转化Sql原理 1.5 MP常规操作1.5.1 添加日志打印1.5.2 测…

搭建Android开发环境—— 熟悉Android开发工具,掌握Android移动端开发环境的搭建、项目导入,并能够将项目部署到模拟器和真机进行测试。

搭建Android开发环境 一、实验目的 熟悉Android开发工具&#xff0c;掌握Android移动端开发环境的搭建、项目导入&#xff0c;并能够将项目部署到模拟器和真机进行测试。 二、实验设备及器件 1、JDK1.8安装包 2、Android Studio安装包 三、实验内容 完成JDK和Android Stud…

WPF多值转换器

背景&#xff1a;实现Slider拖动可以调整rgb 单转换器&#xff1a;WPF中数据绑定转换器Converter-CSDN博客 在View中&#xff1a; <StackPanel Orientation"Vertical"><Slider x:Name"slider_R" Minimum"0" Maximum"255" Wi…

MySQL视图特性

视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1.基本使用 创建视图 create view 视图名 as select 语句&#xff1b; 案例&…