返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot SpringSecurity 详细介绍(基于内存的验证)
  • 278
分享到

SpringBoot SpringSecurity 详细介绍(基于内存的验证)

SpringBoot SpringSecuritySpringBoot SpringSecurity内存 2023-05-18 08:05:51 278人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录配置 spring Security (入门)SpringBoot 集成 SpringSecurity + Mysql + Jwt 附源码,废话不多直接盘SpringBoot已经

SpringBoot 集成 SpringSecurity + Mysql + Jwt源码,废话不多直接盘
SpringBoot已经为用户采用默认配置,只需要引入pom依赖就能快速启动Spring Security。
目的:验证请求用户的身份,提供安全访问
优势:基于Spring,配置方便,减少大量代码

内置访问控制方法

  • permitAll() 表示所匹配的 URL 任何人都允许访问。
  • authenticated() 表示所匹配的 URL 都需要被认证才能访问。
  • anonymous() 表示可以匿名访问匹配的 URL 。和 permitAll() 效果类似,只是设置为 anonymous() 的 url 会执行 filter 链中
  • denyAll() 表示所匹配的 URL 都不允许被访问。
  • rememberMe() 被“remember me”的用户允许访问 这个有点类似于很多网站的十天内免登录,登陆一次即可记住你,然后未来一段时间不用登录。
  • fullyAuthenticated() 如果用户不是被 remember me 的,才可以访问。也就是必须一步一步按部就班的登录才行。

角色权限判断

  • hasAuthority(String) 判断用户是否具有特定的权限,用户的权限是在自定义登录逻辑
  • hasAnyAuthority(String ...) 如果用户具备给定权限中某一个,就允许访问
  • hasRole(String) 如果用户具备给定角色就允许访问。否则出现 403
  • hasAnyRole(String ...) 如果用户具备给定角色的任意一个,就允许被访问
  • hasIpAddress(String) 如果请求是指定的 IP 就运行访问。可以通过 request.getRemoteAddr() 获取 ip 地址

引用 Spring Security

Pom 文件中添加

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-security</artifactId>
</dependency>
<?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">
    <parent>
        <artifactId>vipsoft-parent</artifactId>
        <groupId>com.vipsoft.boot</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>vipsoft-security</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.3.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

运行后会自动生成 passWord 默认用户名为: user

默认配置每次都启动项目都会重新生成密码,同时用户名和拦截请求也不能自定义,在实际应用中往往需要自定义配置,因此接下来对Spring Security进行自定义配置。

配置 Spring Security (入门)

在内存中(简化环节,了解逻辑)配置两个用户角色(admin和user),设置不同密码;
同时设置角色访问权限,其中admin可以访问所有路径(即 @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); //简化操作,将用户名和密码存在内存中,后期会存放在数据库Redis中 auth.inMemoryAuthentication() .passwordEncoder(passwordEncoder) .withUser("admin") .password(passwordEncoder.encode("888")) .roles("ADMIN") .and() .withUser("user") .password(passwordEncoder.encode("666")) .roles("USER"); } @Override protected void configure(httpsecurity http) throws Exception { http.authorizeRequests() //配置拦截的路径、配置哪类角色可以访问该路径 .antMatchers("/user").hasAnyRole("USER") .antMatchers("/*").hasAnyRole("ADMIN") //配置登录界面,可以添加自定义界面, 没添加则用系统默认的界面 .and().fORMLogin(); } }

添加接口测试

package com.vipsoft.web.controller;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class DefaultController {
    @GetMapping("/")
    @PreAuthorize("hasRole('ADMIN')")
    public String demo() {
        return "Welcome";
    }
    @GetMapping("/user/list")
    @PreAuthorize("hasAnyRole('ADMIN','USER')")
    public String getUserList() {
        return "User List";
    }
    @GetMapping("/article/list")
    @PreAuthorize("hasRole('ADMIN')")
    public String getArticleList() {
        return "Article List";
    }
} 

到此这篇关于SpringBoot SpringSecurity 介绍(基于内存的验证)的文章就介绍到这了,更多相关SpringBoot SpringSecurity内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot SpringSecurity 详细介绍(基于内存的验证)

本文链接: https://lsjlt.com/news/211840.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot SpringSecurity 详细介绍(基于内存的验证)
    目录配置 Spring Security (入门)SpringBoot 集成 SpringSecurity + MySQL + JWT 附源码,废话不多直接盘SpringBoot已经...
    99+
    2023-05-18
    SpringBoot SpringSecurity SpringBoot SpringSecurity内存
  • Struts2之Validator验证框架的详细介绍
    Struts2中提供了数据校验验证数据例如验证邮件、数字等。验证方式有3种:一是通过validate()方法,二是通过Xml,三是使用注解方式。一、初始化首先定义一个User类package com.cyw.test;import java...
    99+
    2023-05-31
    struts 验证 dat
  • 基于jvm java内存区域的介绍
    jvm虚拟机在运行时需要用到的内存区域.广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个...
    99+
    2023-05-31
    java jvm 内存
  • SpringBootJWT接口验证实现流程详细介绍
    目录添加pom.xml修改配置文件创建简单的测试接口使用拦截器实现需求:只有用户登录成功后,才能访问其它接口,否则提示需要进行登录 项目仓库地址:https://gitee.com/...
    99+
    2024-04-02
  • Java对象的内存布局详细介绍
    目录一、对象头1)、Mark Word2)、类型指针3)、数组长度(只有数组对象才有)二、实例数据三、对齐填充四、使用JOL工具分析对象内存布局在HotSpot虚拟机中,对象在内存中...
    99+
    2023-02-13
    Java对象内存布局 Java内存布局 Java对象内存
  • 详细介绍 PHP内存分配函数
    PHP 是一种流行的服务器端脚本语言,广泛用于 Web 开发。 与大多数编程语言一样,PHP 需要分配内存来创建变量、数组、对象和其他数据结构。 PHP 提供了几个分配函数来动态分配内存。 这些功能...
    99+
    2024-02-27
  • 基于Android Service 生命周期的详细介绍
    Service概念及用途: Android中的服务,它与Activity不同,它是不能与用户交互的,不能自己启动的,运行在后台的程序,如果我们退出应用时,Service进程并没...
    99+
    2022-06-06
    android service service Android
  • SpringBoot+SpringSecurity实现基于真实数据的授权认证
    目录(一)概述(二)前期项目搭建(三)认证与授权的实现(四)总结(一)概述 Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,Spring Secur...
    99+
    2024-04-02
  • Linux内存管理和寻址详细介绍
    目录1.概念内存管理模式地址类型划分说明:2.页式管理x86架构32位cpux86架构 64位cpu3.地址划分4. 调试程序寄存器示例一个内核宕机的日志:查看程序寄存器段寄存器有0x23和0x2b两...
    99+
    2022-06-04
    Linux内存管理 linux内存寻址
  • 关于java泛型的详细介绍
    Java泛型泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 比如我们要写一个排序方法,能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,...
    99+
    2021-04-27
    java入门 java 泛型
  • 关于MySql知识的详细介绍
    下文主要给大家带来关于MySql知识的详细介绍,希望这些内容能够带给大家实际用处,这也是我编辑关于MySql知识的详细介绍这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。    ...
    99+
    2024-04-02
  • 关于redis命令的详细介绍
    小编给大家分享一下关于redis命令的详细介绍,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!              &...
    99+
    2024-04-02
  • 详细介绍HTML的基本用法
    HTML是一种基本的网页设计语言,是创建网页的重要工具之一。对于想要学习HTML的初学者来说,了解HTML的基本用法是至关重要的。本文将详细介绍HTML的基本用法,让你轻松入手。一、HTML的基本概念HTML,全称是HyperText Ma...
    99+
    2023-05-14
  • 阿里云ECS4G内存的详细介绍及与其他内存的比较
    随着云计算的发展,阿里云作为国内领先的云服务商,提供了丰富的云产品和服务。其中,阿里云ECS( Elastic ComputeService)是其主要的云服务器产品之一。本文将详细介绍阿里云ECS4G内存的性能和特点,并与其他内存进行比较...
    99+
    2023-10-30
    内存 阿里 详细介绍
  • java中关于对象的详细介绍
    一、对象的创建步骤:(1)声名对象变量:对象变量的声明并没有创建对象,系统只是为该改变量分配一个引用空间。(2)对象的实例化:为对象分配空间,执行new运算符后的构造方法完成对象的初始化,并返回该对象的引用。过程:首先为对象分配内存空间,并...
    99+
    2014-08-23
    java入门 java 对象
  • java中关于scanner类的详细介绍
    1.Scanner的实现步骤第一步:在有效代码的第一行,通过import导入Scanner类!import java.util.Scanner;第二步:通过new关键字实例化一个Scanner对象!Scanner input = new S...
    99+
    2019-01-24
    java入门 java scanner
  • MySQL内部函数的超详细介绍
    目录字符串函数1. length(str)2. concat(str1,str1,…)3. insert(str1,n,m,str2)4. lower(str)5. upper(str)6. le...
    99+
    2022-08-08
    mysql内置函数有哪些 mysql常用内置函数 sql函数大全及举例
  • oracle rac内核参数的详细介绍
    本篇内容介绍了“oracle rac内核参数的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.在...
    99+
    2024-04-02
  • Android内置SQLite的使用详细介绍
    目录一、创建数据库  1、新建数据库帮助类2、在数据库帮助类中输入代码3、代码讲解  二、添加数据1、界面效果2、准备工作3、布局界面 activity_main...
    99+
    2024-04-02
  • java中关于散列表的详细介绍
    什么是散列表散列表,也叫作哈希表(Hash Table),是一种提供键(Key)和值(Value)的映射关系的数据结构,只要给出一个Key,就可以高效查找到它所匹配的Value,时间复杂度接近于O(1)。在线学习视频推荐:java视频散列表...
    99+
    2014-10-05
    java教程 java 散列表
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作