spring-boot-starter-security的简单使用

springboot 轻量及脱敏工具(Desensitization) 简单好用,自己动手试试 阅读详情
AI摘要

本文详细介绍了如何在Spring Boot中使用配置文件、配置类和注解方式配置Security,包括基于内存的权限管理和针对不同接口的访问控制。通过实例演示了如何实现用户角色验证和基于方法的权限校验。

基于配置文件使用security

首先引入两个必备的依赖

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

由于springboot对starter依赖进行了自动化的配置,即约定大于配置,也就是带有starter的依赖在整合springboot时,在我们不做任何配置时,默认使用starter约定的配置,只有当我们进行自定义配置时,springboot才会使用我们的配置

通过配置文件的方式在内存中配置一个用户

spring:
  application:
    name: spring-security
  security:
    user:
      name: user
      roles: admin
      password: 123456
server:
  port: 8848

由于spring-boot-starter-security默认开启登录认证,所以我们需要新建一个TestController的controller类

@RestController
@RequestMapping("/test")
public class TestConteoller {

    @GetMapping("/security")
    public String security(){
        return "test-spring-security登陆成功";
    }
}

启动应用并访问http://localhost:8848/test/security,我们会看到spring-boot-starter-security自带的登陆页面,输入我们在配置文件中配置的用户名称和密码,之后我们会在页面看到

test-spring-security登陆成功

基于配置类使用security

上面我们实现了基于配置文件的security简单配置,显然这样并不适用现实场景,下面我们见通过配置类的方式实现security的自定义配置

新建config文件夹并其中新建SecurityConfig配置类,让其继承WebSecurityConfigurerAdapter抽象类并重写两个configure方法,实现web环境下的security自定义配置,具体如下

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    //自定义配置URL资源的权限控制
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.
                //对所有请求进行权限认证
                authorizeRequests()
                //自定义配置请求地址权限
                .mvcMatchers("/test/security").permitAll()
                // permitAll()    对所有请求放行
                .mvcMatchers("/admin/security").hasRole("admin")
                .mvcMatchers("/user/security").hasRole("user")
                .mvcMatchers("/tUser/selectAll").anonymous()
                // anonymous()    允许匿名访问,登陆状态不能访问

                .anyRequest().authenticated()       //所有请求都需要进行认证
                .and()
                .formLogin()
                //.loginPage("login")       自定义登陆页面
                .permitAll()        //所有用户都可以访问
                .and()
                .logout()
                //.logoutUrl("logout")      自定义配置退出登陆页面
                .permitAll();
    }


    //自定义配置认证规则
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        //spring内置了两种UserDetailManager实现,一种基于内存的InMemoryUserDetailsManager,另一种是基于数据库的JdbcUserDetailsManager

        auth.
                //使用内存中的InMemoryUserDetailsManager(内存用户管理器)
                inMemoryAuthentication()
                //不使用passwordEncoder密码加密
                .passwordEncoder(NoOpPasswordEncoder.getInstance())
                //在内存中给配置user用户
                .withUser("admin").password("admin").roles("admin")
                .and()
                //在内存中配置admin用户
                .withUser("user").password("user").roles("user");

    }
}

security配置类搞定之后,我们新建UserController和AdminController两个接口测试类,具体如下

@RestController
@RequestMapping("/user")
public class UserController {

    
    @GetMapping("/security")
    public String security(){
        return "user-spring-security登陆成功";
    }
}



@RestController
@RequestMapping("/admin")
public class AdminController {

 
    @GetMapping("/security")
    public String security(){
        return "admin-spring-security登陆成功";
    }
}

重新启动应用,并分别访问http://localhost/test/security、http://localhost/user/security、http://localhost/admin/security三个地址,我们会发现第一个地址不用登陆就能直接访问,第二个地址需要user角色权限,第三个地址需要admin角色权限;需要注意的是,当我们访问第二个地址并使用user角色登录之后,我们访问第三个地址会报403错误,其原因是浏览器在我们使用user登录时缓存了user的登录会话信息即session状态,所以当我们登录第三个地址时浏览器会以user的登录状态去访问admin角色下的接口,显然这是访问不到的。

基于注解的方式实现对接口中方法的权限认证

首先在SecurityConfig配置类中添加@EnableGlobalMethodSecurity(prePostEnabled = true) 注解开启该功能

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)      //开启基于方法的注解权限认证,默认为false
public class SecurityConfig extends WebSecurityConfigurerAdapter {

然后我们就可以在想要进行权限校验的方法上使用@PreAuthorize("hasAuthority('ROLE_user')")或者@PreAuthorize("hasRole('user')")进行相应的权限校验了。

特别说明:hasRole和hasAuthority基本上没有区别,主要差异在于hasRole会在我们添加的角色名称前添加ROLE_前缀,所以在数据库中的权限字符串需要加上 ROLE_ 前缀。即数据库中存储的用户角色如果是 ROLE_admin,这里就是 admin。hasAuthority和数据库一样就行

`spring-boot-starter-security` 是 Spring Boot 提供的一个启动器,用于快速集成 Spring Security 框架 是一个非常有用的启动器,它简化了在 Spring Boot 应用程序中集成 Spring Security 的过程。通过添加依赖、配置类和自定义用户加载逻辑,你可以快速构建安全的 Web 应用程序。Spring Security 提供了丰富的功能,包括认证、授权、CSRF 保护等,能够满足大多数应用程序的安全需求。技术管理策略。 阅读详情

相关推荐

Security安全认证 | Spring Boot如何集成Security实现安全认证

前面介绍了Spring Boot 使用JWT实现Token验证,其实Spring Boot 有完整的安全认证框架:Spring Security。接下来我们介绍如何集成Security 实现安全验证。 一、Security简介 安全对于企业来说至关重要,必要的安全认证为企业阻挡了外部非正常的访问,保证了企业内部数据的安全。 当前,数据安全问题越来越受到行业内公司的重视。数据泄漏很大一部分原因是非正常权限访问导致的,于是使用合适的安全框架保护企业服务的安全变得非常紧迫。在Java领域,Spring Sec

qq_54693189的博客 431

Spring Security 应用详解

开发可以避免一些繁琐的工程 搭建和配置,同时它集成了大量的常用框架,快速导入依赖包,避免依赖包的冲突。、 Spring security等,使用。用于开发Spring Security。工程启动会自动扫描启动类所在包下的所有。开发可以大大得高生产率,所以。自动装配机制,这里无需使用。自动装配机制,这里无需使用。的快速开发框架,基于。

· 1618

初探 Spring Boot Starter Security:构建更安全的Spring Boot应用

Spring Boot 作为 Java 生态系统下的热门框架,以其简洁和易上手著称。而在构建 Web 应用程序时,安全性始终是开发者必须重视的一个方面。Spring Boot Starter Security 为开发者提供了一个简单但功能强大的安全框架,使得实现身份验证和授权变得相对容易。 本文将带你深入了解如何使用 Spring Boot Starter Security 来构建一个安全的 Spring Boot 应用,包括基本配置、常见用例以及一些技巧和最佳实践。

fudaihb的博客 2042

config-server/client 简单接入 spring-boot-starter-security

由于配置中心内容比较敏感,所以结合spring security实现安全保护。 首先改造config-server,在pom文件里引入spring-boot-starter-security: <dependency> <groupId>org.springframework.boot</groupId> <artifactId&gt...

sijun1102的专栏 4307

Spring Boot安全管理

formLogin()⽤户登录⽅法中涉及⽤户登录的主要⽅法及说明如下表所示。rememberMe()记住我功能相关涉及记住我的主要⽅法及说明如下表所示。例如,只有唯⼀的默认登录⽤户user。开始,⾃定义⽤户认证必须设置密码编码器⽤于保护密码,否则控制台会出现。⾃定义⽤户认证时,可以为某个⽤户⼀次指定多个⻆⾊或权限,例如,安全管理功能来说,则还需要额外引⼊⼀些其他安全依赖。⾃定义⽤户认证时,可以定义⽤户⻆⾊。⽤户请求控制相关的主要⽅法及说明。⽤户登录失败后的跳转地址,默认。登录⽤户的⽤户名参数, 默认为。

weixin_62907807的博客 5859

英飞凌功率MOSFET SPICE 瞬态仿真不收敛问题解决(基于TINA)

英飞凌功率MOSFET SPICE仿真容易出现不收敛问题,这个对于IGBT和SIC的管子应该是一样的,在瞬态仿真分析中,出现如下图所示的报错,Convergence problem。spice是为线性电路设计的,例如运算放大器、线性电源等,不是专门仿真开关电路的。在瞬态仿真时,仿真器是要不断迭代求解的,开关快速的跳变,容易在迭代式出现不收敛的问题。,由于时间步长减少,会消耗更多的计算机内存,如果运行多次内存消耗过大,会报“Out of memory”.解决方法是:报错工程,重启软件,内存重新计算。

miaoxiaokeji的博客 2291

集成Spring Security

简单说了下怎么集成spring security

你的指尖有改变世界的力量 421

abap中使用Screen painter为普通屏幕创建单选按钮组radiobutton组的过程

选择屏幕中,创建radiobutton组直接使用代码实现,如下所示 SELECTION-SCREEN BEGIN OF BLOCK BK1 WITH FRAME TITLE TEXT-001. PARAMETERS R1 RADIOBUTTON GROUP GR1. PARAMETERS R2 RADIOBUTTON GROUP GR1. PARAMETERS R3 RADIOBUTTON GR

charliefromkansas的博客 8300

【Spring Security系列学习】第一章 Spring Security入门

Spring Security入门中的入门

qq_37759693的博客 780

蓝桥杯FPGA赛道积分赛

代码如下: 按键驱动 代码如下 按键驱动 代码如下: 顶层文件 按键驱动 数码管驱动 声明:本代码借鉴网络资料,如有侵权和错误请联系作者删除。我是从寒假开始备赛的,由于我基础不行,备赛过程中也是混混呃呃的,备赛效率不高,总体来说备赛不认真,有点拖拉,但是最后我也坚持备赛到了今天,在备赛过程中,即复习了旧的东西,也学到了新的东西,总结起来还是有点收获的,后天北京、天津、河北地区就要进行省赛了,我会全力以赴,不管结果怎么样,尽力就好,最后祝大家都能

weixin_69804913的博客 1980

电机系列(1) - foc最基本原理、clark变换 、park变换、附代码

什么是FOC? FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制 (VC,Vector Control) ,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。 简单来说就是,FOC是一种对无刷电机的驱动控制方法,它可以让我们对无刷电机进行 “像素级” 控制,实现很多传统电机控制方法所无法达到的效果。 因为所谓的“矢量控制”其实就是

nepqiu的博客 7万+

Spring Boot 整合 Security 权限控制 - 第001章 - 基础环境配置

视频课程地址: Spring Boot 整合 Security 权限控制 创建一个 maven 项目(可使用 idea 或者其他编辑器) mvn archetype:generate -DgroupId=com.edurt -DartifactId=springboot-security-integration -DarchetypeArtifactId=maven-archetype-q...

qianmoQ - 关注云计算,关注大数据 8682

CVAT自动标注避坑指南:从nuctl安装到YOLOv5模型部署的完整流程

本文详细介绍了在CVAT中部署YOLOv5自动标注功能的完整流程与避坑指南。重点解决了从nuctl工具安装、项目创建时因网络问题导致的镜像拉取失败,到最终模型函数部署与CVAT集成的关键步骤。针对国内网络环境,提供了实用的镜像替换方案,帮助用户顺利完成基于CPU的自动化标注环境搭建。

pytorch8learner的博客 228

Spring Security基础

1. 前言 Spring Security,这是一种基于 Spring AOP 和 Servlet 过滤器的安全框架。它提供全面的安全性解决方案,同时在 Web 请求级和方法调用级处理身份确认和授权。 2. 新建工程 即引入以下依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

书山有路勤为径,学海无涯苦作舟 150

Vue3 - Element Plus 日期选择器 el-date-picker,设置 type=week 变成周选择器后,将选择周时修改为 “周一至周日“ 为一组范围(详细示例代码,新手小白秒会)

vue3,element-plus,DatePicker日期选择器,el-date-picker,周,type=week,周选择器,日期选择器week怎么拿到具体的时间范围,如何取week周选择器的value值,format如何设置,时间选择器按周选择时展示具体日期范围,vue3elementPlus日期选择器选择一周7天的数据格式怎么拿到,el-date-picker设置type等于week后怎么设置format属性,format和value-format怎么设置,范围选择器周,一周,选择一周7天时间

🏆 前端领域优质创作者 1万+

英飞凌 AURIX TC3XX 系列单片机的链接文件

这篇介绍英飞凌 AURIX TC3XX 系列单片机的链接文件,主要是针对使用 SOTA 功能如何修改链接文件,完整地实现 SOTA 功能

大橙子的博客 4385

5.spring security-入门案例

创建案例   pom: <?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

自能生羽翼,何必仰云梯 503

信创服务器(麒麟 V10 SP3)安装 NVIDIA GeForce RTX 5070 驱动

本文介绍了在麒麟V10 SP3系统上安装NVIDIA RTX 5070显卡驱动的详细步骤。首先需要关闭nouveau驱动,安装必要的编译环境和工具,确保内核版本与kernel-devel完全一致。最后运行NVIDIA驱动安装程序,关键选择包括启用DKMS支持、编译模块、禁用32位兼容和nouveau驱动。整个流程适用于海光CPU和Blackwell架构GPU的国产操作系统环境。

猿小白的博客 668

使用 Keycloak 轻松保护 Spring Boot 应用程序

参考文章:使用 Keycloak 轻松保护 Spring Boot 应用程序 尽管安全性是应用程序的一个关键点,但是在开发中实施起来确实比较麻烦。更加麻烦的是,这个关键点通常不怎么受重视,实现的效果普遍的 low,而且受到诸多方面的掣肘。而最近安全服务器的出现,就可以将认证和授权方面的业务逻辑外包和分派出去。 在这些服务器中,最有希望的是 Keycloak,因为它开放源代码,灵活,而且未来能适合...

justlpf的专栏 4432

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

动手试一试 Spring Security入门

引入Web和Thymeleaf的依赖启动器。

daqi1983的博客 454

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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 https://maven.apache.org/xsd/mav

... 168

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

springboot禁止输入地址跳过登录_SpringBootSecurity学习(01)网页版登录入门介绍

Web应用安全管理Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理。权限管理的设计一般使用角色来管理,即给一个用户赋予哪些角色,这个用户就具有哪些权限。Spring框架体系中,经典的安全体系框架是Security。关于系统的安全管理及各种设计,Spring Security已经大体上都实现了,只...

weixin_33087827的博客 888

Spring Boot 教程之三十六:实现身份验证

设置和配置基本身份验证。身份验证是任何类型的安全性中的主要步骤之一。Spring 提供依赖项,即,可帮助在 API 上建立身份验证。有很多方法可以将添加到我们的 Restful Web 服务中。但在这里我们将讨论过程。对于,我们将在 pom.xml 文件中添加注释以将 Spring Security 激活到 Spring Boot。注意:首先我们需要在我们的项目中建立 spring 应用程序。

潜洋的专栏 1298

justauth-spring-boot-starter V1.3.5 发布成功

justauth-spring-boot-starter V1.3.5 发布成功 关于 justauth-spring-boot-starter justauth-spring-boot-starter 是 Spring Boot 集成 JustAuth 的最佳实践。如果你的项目是基于 Spring Boot 构建,则推荐你用justauth-spring-boot-starter ,源码地址:justauth-spring-boot-starter justauth-spring-boot-starte

Handsome丶Boy 372

Spring Boot依赖管理实战:从starter选择到版本冲突排查

在Java工程实践中,依赖管理是项目构建的基石,直接决定应用能否快速启动、稳定运行。Spring Boot通过starter机制将常用技术栈封装为场景化依赖,开发者只需声明所需模块,即可获得自动配置与内嵌容器支持。其核心价值在于借助spring-boot-starter-parent统一版本管理,大幅减少手动协调依赖版本的复杂度。面对版本冲突、ClassNotFound等常见问题,借助mvn dependency:tree精准定位传递依赖来源,配合BOM、optional与exclusions合理裁剪依赖边

weixin_30074763的博客 110
上一篇: springboot集成spring-boot-starter-data-elasticsearch
下一篇: spring session搭配redis的简单使用
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值