Springboot 实践(6)spring security配置与运用

news2024/11/20 12:44:59

        前文讲解了springboot项目添加静态资源目录,到目前为止,项目已经建立了后台服务控制、静态资源目录等服务;项目开发是为特定用户服务的,不具备访问权限用户,不允许访问系统,那么如何对系统资源进行保护呢?这就涉及到了我们此文所要引入的spring security。

        Spring Security是一个能够为基于Spring企业应用系统提供声明式的安全访问控制解决方案的安全框架。

1、项目pom.xml文件引入spring security jar包

    <dependency>

      <groupId>org.springframework.boot</groupId>

      <artifactId>spring-boot-starter-security</artifactId>

</dependency>

添加完上述代码后,操作如下:

(1)右键选择项目名称,弹出菜单中选择“maven“ à “update project”,更新项目jar包;

(2)启动项目,在浏览器地址数据http://localhost:2885,显示如下:

图1、spring security 默认授权页面

备注:该页面为spring security默认授权页面,此时,我们需要用户授权信息,即账户和密码。

2、application.yml配置权限参数

        在application.yml文件中配置如下参数,配置用户信息授权信息,即账户和密码。

  security:

    user:

      name: admin

      password: 123

roles: admin

       在浏览器地址栏输入“http://localhost:2885/assets/img/海豚.png”,弹出授权页面,如图1所示,输入admin(账户)/123(密码),点击“login”按钮,图片正常访问。

图2、访问系统资源页面

3、替换spring security默认授权页面

        在实际的系统开发中,授权页面一般具有特定信息,页面布局、页面总统基色、以及显示系统都有特定的要求,这就需要替换spring security默认授权页面。

     自定义授权页面的制作,此处不做讲解,用户自行开发,现使用已开发的登录页面“loginUI.html”作为演示样例,页面如图3所示,

图3、spring security 自动授权页面

替换spring security页面的操作如下:

(1)将loginUI.html拷贝到“assets”目录下

图4、项目目录

(2)通过WebSecurityConfigurerAdapter接口,配置spring security

@Configuration

@EnabWebSecurity

public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override

    protected void configure(AuthenticationManagerBuilder auth) throws Exception {

        auth

          .inMemoryAuthentication()

          .passwordEncoder(new MyPasswordEncoder())//在此处应用自定义PasswordEncoder

          .withUser("admin")

            .password("123")

            .roles("ADMIN")

          .and()

          .withUser("user")

            .password("123")

             .roles("USER");

    }

    /** 放行静态资源 */

    @Override

    public void configure(WebSecurity web) throws Exception {

       web.ignoring().antMatchers("/swagger-ui.html");

       web.ignoring().antMatchers("/swagger-resources/**");

       web.ignoring().antMatchers("/v2/api-docs");

      

      

       /************************************************************

        * servlet 3.0 以上的版本支持直接访问 jar 包里面的资源文件。

        * 访问方式:将 jar 包里的 META-INF/resources 目录看成根目录,

        * 则这个目录下的文件都可以直接访问

        * swagger-bootstrap-ui-1.9.6.jar资源放行*/

       web.ignoring().antMatchers("/webjars/**");

       web.ignoring().antMatchers("/doc.html");

      

       web.ignoring().antMatchers("/lock");

       //web.ignoring().antMatchers("/assets/**");

       web.ignoring().antMatchers("/assets/img/bg.jpg");

       //websocket

       web.ignoring().antMatchers("/imserver/**");

       //放行consul安全监测接口

       web.ignoring().antMatchers("/v1");

       web.ignoring().antMatchers("/actuator/health");

       //web.ignoring().antMatchers("/loginError.html");

       web.ignoring().antMatchers("/favicon.ico");

       //放行单点登录    

    }

   

    @Override

    protected void configure(HttpSecurity http) throws Exception {

       http.authorizeRequests()

                  .antMatchers("/**").hasRole("USER")

                  .antMatchers("/**").hasRole("ADMIN")

                  .antMatchers("/loginUI").permitAll()

                  .antMatchers("/loginUI.html").permitAll()               

              .anyRequest().authenticated()          

              .and()

              .httpBasic(); 

       http.csrf().disable();//关闭csrf功能,解决登录失败

        //启用登录功能,可以使用默认的登录页,这里使用自定义的login.html页面

        http.formLogin().loginPage("/assets/loginUI.html")

            .loginProcessingUrl("/login")

            .defaultSuccessUrl("/mainfunction").permitAll();// 登录成功后默认页面;

        http.formLogin().failureForwardUrl("/error");  // 登录失败后默认页面;

       

    }  

}

(3)另外需要添加控制,注册login服务

public class LoginController {

    /**

     * 自定义登录页面

     * @return

     */

    @GetMapping("/login")

    public String login() {

        return "login";

}

}

到此,spring security添加讲解已经完成,再次访问http://localhost:2885/assets/img/海豚.png,系统自动弹出替换的授权页面,如图5所示:

图5、替换后的授权页面

下文讲解服务注册软件spring cloud的配置与使用,敬请关注!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统-笔记-第二章-进程

目录 二、第二章——【进程】 1、进程的概念 &#xff08;1&#xff09;PID & PCD 进程控制块 &#xff08;2&#xff09;程序段 & 数据段 &#xff08;3&#xff09;特征 &#xff08;特性&#xff09; property &#xff08;4&#xff09;总结 2、进程的状态 …

配置应用/配置权限提升

配置应用 配置 servera 上的应用 ex200 &#xff0c;要求如下&#xff1a;当以用户 pandora 运行 ex200 时&#xff0c;它将显示 borough lively excursion nephew scarce find / | grep ex200 which ex200wim /usr/local/bin/ex200 echo borough lively excursion nephew …

【Java集合框架面试题(30道)】

文章目录 Java集合框架面试题(30道)引言1.说说有哪些常见集合&#xff1f; List2.ArrayList和LinkedList有什么区别&#xff1f;3.ArrayList的扩容机制了解吗&#xff1f;4.ArrayList怎么序列化的知道吗&#xff1f;为什么用transient修饰数组&#xff1f;5.快速失败&#xff0…

工厂无线安灯呼叫系统解决方案

在现代制造业中&#xff0c;生产线的高效运作是企业成功的关键之一。为了实现生产线的顺畅运转&#xff0c;安灯系统成为了制造业生产现场的必备工具。安灯系统是一个专门应用软硬件系统&#xff0c;旨在快速联络生产、物料、维修、主管等部门&#xff0c;以满足生产线的需求并…

【STM32RT-Thread零基础入门】 5. 线程创建应用(线程创建、删除、初始化、脱离、启动、睡眠)

硬件&#xff1a;STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 文章目录 前言一、线程管理接口介绍二、任务&#xff1a;使用多线程的方式同时实现led闪烁和按键控制喇叭&#xff08;扫描法&#xff09;1. RT-Thread相关接…

根据两组相关联数据(部门 + 用户),生成列表树

文章目录 背景想要得到的数据格式业务层获取数据&#xff0c;部门及用户&#xff0c;构建树结构TreeUtil生成的格式部门实体用户实体 背景 目前拥有用户和部门两组数据&#xff0c;根据部门和用户的关系&#xff0c;生成部门树&#xff0c;且每个部门下拥有哪些与子部门同级的…

接口自动化测试框架搭建

为什么要做&#xff08;自动化&#xff09;接口测试&#xff1f; 1、由于现在各个系统的复杂度不断上升&#xff0c;导致传统的测试方法成本上升且测试效率大幅下降&#xff0c;而接口测试相对于UI测试更加稳定&#xff0c;且相对容易实现自动化持续集成&#xff0c;可以减少人…

Spring BeanDefinition 也分父子关系?

在 Spring 框架中&#xff0c;BeanDefinition 是一个核心概念&#xff0c;用于定义和配置 bean 的元数据&#xff0c;虽然在实际应用中&#xff0c;我们一般并不会或者很少直接定义 BeanDefinition&#xff0c;但是&#xff0c;我们在 XML 文件中所作的配置&#xff0c;以及利用…

数字化智慧工地云平台,劳务实名制系统、视频监控系统、环境监测系统、人员定位系统、工资代发系统、AI识别系统、视频监控系统

智慧工地概念 智慧工地是一种崭新的工程全生命周期管理理念&#xff0c;是指运用信息化手段&#xff0c;通过对工程项目进行精确设计和施工模拟&#xff0c;围绕施工过程管理&#xff0c;建立互联协同、智能生产、科学管理的施工项目信息化生态圈&#xff0c;并将此数据在虚拟…

RabbitMQ的5种消息队列

RabbitMQ的5种消息队列 1、七种模式介绍与应用场景 1.1 简单模式(Hello World) 一个生产者对应一个消费者&#xff0c;RabbitMQ 相当于一个消息代理&#xff0c;负责将 A 的消息转发给 B。 应用场景&#xff1a;将发送的电子邮件放到消息队列&#xff0c;然后邮件服务在队列…

LeetCode150道面试经典题-- 环形链表(简单)

1.题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

通过pycharm使用git和github的步骤(图文详解)

一、在Pycharm工具中配置集成Git和GitHub。 1.集成Git。 打开Pycharm, 点击File-->Settins-->Version Control-->Git 然后在 Path to Git executable中选择本地的git.exe路径。如下图&#xff1a; 2.集成GitHub 打开Pycharm, 点击File-->Settins-->Version…

基于Googlenet深度学习网络的信号调制类型识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 深度学习与卷积神经网络 4.2 数据预处理 4.3 GoogLeNet结构 4.4 分类器 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ............…

Qt 父子对象的关系

文章目录 前言一. Qt 对象可以存在父子关系&#xff1a;二. 父子关系的建立&#xff1a;三. Qt 对象的销毁&#xff1a; 总结 前言 Qt是一个流行的C框架&#xff0c;用于开发跨平台的图形用户界面&#xff08;GUI&#xff09;应用程序。Qt提供了一种强大的对象模型&#xff0c…

leetcode做题笔记83删除排序链表中的重复元素

给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2] 思路一&#xff1a;模拟题意 struct ListNode* deleteDuplicates(struct ListNode* head){i…

韦东山-电子量产工具项目:显示单元

所有代码都已通过测试跑通&#xff0c;其中代码结构如下&#xff1a; 一、include文件夹 1.1 disp_manager.h #ifndef _DISP_MANAGER_H //防止头文件重复包含,只要右边的出现过&#xff0c;就不会再往下编译 #define _DISP_MANAGER_H //区域结构体 typedef struct DispBuff …

机器学习样本数据划分的典型Python方法

机器学习样本数据划分的典型Python方法 DateAuthorVersionNote2023.08.16Dog TaoV1.0完成文档撰写。 文章目录 机器学习样本数据划分的典型Python方法样本数据的分类Training DataValidation DataTest Data numpy.ndarray类型数据直接划分交叉验证基于KFold基于RepeatedKFold基…

【C++】面向对象编程引入 ( 面向过程编程 | 查看 iostream 依赖 | 面向对象编程 )

文章目录 一、面向过程编程二、查看 iostream 依赖三、面向对象编程 一、面向过程编程 给定 圆 的 半径 , 求该圆 的 周长 和 面积 ; 半径为 r r r , 周长就是 2 π r 2 \pi r 2πr , 面积是 π r 2 \pi r^2 πr2 ; 使用 面向过程 的方法解决上述问题 , 只能是令程序顺序执…

DDCX——运维开发准备

DD——运维开发准备 一4 linux用的什么版本&#xff0c;常见命令&#xff08;awk sed grep telnet netstate tcpdump top ps perf&#xff09;5 数据库有哪些类型&#xff0c;关系型数据库有哪些&#xff0c;非关系型数据库有哪些6 mysql事务7 mysql集群了解多少8 redis数据类型…

Spring 框架入门介绍及IoC的三种注入方式

目录 一、Spring 简介 1. 简介 2. spring 的核心模块 ⭐ 二、IoC 的概念 2.1 IoC 详解 2.2 IoC的好处 2.3 谈谈你对IoC的理解 三、IoC的三种注入方式 3.1 构造方法注入 3.2 setter方法注入 3.3 接口注入&#xff08;自动分配&#xff09; 3.4 spring上下文与tomcat整…