SpringBoot之整合Spring Security,为自己的系统提供安全保障

简介: by 杨乐需求:        1.权限控制:角色有多种角色,每个角色对应多个用户,每个角色又对应不同的菜单权限        2.资源控制:                        ①有些地址只能当用户登录之后才能访问 ...
by 杨乐

需求:


        1.权限控制:角色有多种角色,每个角色对应多个用户,每个角色又对应不同的菜单权限

        2.资源控制:

                        ①有些地址只能当用户登录之后才能访问

                        ②有些地址可以对无状态用户开放,例如API

                        ③对不同角色的用户的访问的权限进行控制

                        ...

         3.系统登录与注销:登录成功后将用户信息保存在系统中,转向成功页面,否则重新指向到登录页面,并提示错误信息

初步解决方案:

            使用filter完成所有需求:

            ①将用户登录的信息保存在session中,在filter进行判断,请求的地址是否是在登录  之后才能访问,然后写一堆if判断,解决问题1

          ②解决方法和问题①一样的,在filter中进行过滤

           ③对不同角色有不同的权限则也可以在filter中操作,根据用户信息查到用户所属角                                  色,再进行判断,解决问题。

            ④系统的登录和注销可以使用一个action,在action中进行这些逻辑处理。解决问题

遇到的问题:

        在使用如上方法完成需求之后,反过来看,会发现有好多冗余代码,使系统变得臃肿,光 filter里面就会出现大量的if语句,而且系统代码并不能被下一个系统直接复用,没有将功能进行模块化的开发。

最终解决方案:

      使用springboot 对spring security进行整合:

           为什么使用security?

                    ①Spring Security是能够为J2EE项目提供综合性的安全访问控制解决方案的安全框架;

                    ②Spring Security 完美的解决了我以上的需求

                    ③有了security我可以更加便捷的管理我的系统,拦截一个地址,不再需要我去配置一                       个filter,只需要添加一个配置就能搞定了,废话不多说进入正题吧:

开始coding吧

spring security的starterMaven包:

security maven

一、首先进行安全入口的配置:

WebSecurityConfig.java

         WebSecurityConfig 继承WebSecurityConfigurerAdapter重写config,configureGlobal方法

WebSecurityConfig.java

这里面可以配置不需要拦截的url,和登录,注销后的处理页面,还能添加认证数据源,再登录时获取额外的参数,例如后面提到的验证码等参数

WebSecurityConfig.java

这个方法用来加载 处理登录的逻辑代码(用户名,密码,验证码等逻辑验证)

二、用户验证

CustAuthenticationProvider.java 实现AuthenticationProvider接口中的authenticate方法进行登录认证

CustAuthenticationProvider.java

三、封装用户信息类

CustUserDetails.java 实现UserDetails接口

CustUserDetails.java

四、根据用户名获取用户信息

SnailUserDetailsService.java 实现UserDetailsService接口中的loadUserByUsername方法,从数据库中加载用户信息并封装到CustUserDetails中返回

SnailUserDetailsService.java 

五、添加额外参数验证:

在普通的认证中,我们只能对用户名和密码进行验证,不能够获取表单中额外参数进行验证(如验证码),但是security给我们打开了一扇门,还记得步骤一中的authenticationDetailsSource这个源码,这个就是加载额外数据源参数,我们只需创建一个类实现AuthenticationDetailsSource接口中的buildDetails方法,将我们需要的额外参数加载进来即可

CustomAuthenticationDetailsSource.java实现AuthenticationDetailsSource接口

CustomAuthenticationDetailsSource.java

创建CustomWebAuthenticationDetails.java继承WebAuthenticationDetails加载参数

CustomWebAuthenticationDetails.java

六、到这里,所有代码都写完了,我们还有一个需求就是如何在项目中获取用户信息:security提供了SecurityContextHolder这个类,能够帮助我们获取用户的所有信息,使用方式如下:

controller

附上所有代码下载链接,使用时请大家根据自己的开发环境进行相应的调整,如果没有积分的可以留言,我会上传到百度云中,提供你们下载。

csdn:https://download.csdn.net/download/weixin_34311210/10400629

百度云:https://pan.baidu.com/s/1NNgCgk_2iqjMgq6tgeJEog

相关文章
|
2天前
|
存储 安全 Java
打造智能合同管理系统:SpringBoot与电子签章的完美融合
【10月更文挑战第7天】 在数字化转型的浪潮中,电子合同管理系统因其高效、环保和安全的特点,正逐渐成为企业合同管理的新宠。本文将分享如何利用SpringBoot框架实现一个集电子文件签字与合同管理于一体的智能系统,探索技术如何助力合同管理的现代化。
17 4
|
2天前
|
前端开发 Java Apache
SpringBoot实现电子文件签字+合同系统!
【10月更文挑战第15天】 在现代企业运营中,合同管理和电子文件签字成为了日常活动中不可或缺的一部分。随着技术的发展,电子合同系统因其高效性、安全性和环保性,逐渐取代了传统的纸质合同。本文将详细介绍如何使用SpringBoot框架实现一个电子文件签字和合同管理系统。
10 1
|
4天前
|
JavaScript Java 关系型数据库
自主版权的Java诊所管理系统源码,采用Vue 2、Spring Boot等技术栈,支持二次开发
这是一个自主版权的Java诊所管理系统源码,支持二次开发。采用Vue 2、Spring Boot等技术栈,涵盖患者管理、医生管理、门诊管理、药店管理、药品管理、收费管理、医保管理、报表统计及病历电子化等功能模块。
|
5天前
|
文字识别 安全 Java
SpringBoot3.x和OCR构建车牌识别系统
本文介绍了一个基于Java SpringBoot3.x框架的车牌识别系统,详细阐述了系统的设计目标、需求分析及其实现过程。利用Tesseract OCR库和OpenCV库,实现了车牌图片的识别与处理,确保系统的高准确性和稳定性。文中还提供了具体的代码示例,展示了如何构建和优化车牌识别服务,以及如何处理特殊和异常车牌。通过实际应用案例,帮助读者理解和应用这一解决方案。
|
9天前
|
Java 测试技术 开发者
springboot学习四:Spring Boot profile多环境配置、devtools热部署
这篇文章主要介绍了如何在Spring Boot中进行多环境配置以及如何整合DevTools实现热部署,以提高开发效率。
27 2
|
9天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
24 1
|
9天前
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
13 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
9天前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
41 0
|
1月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
10天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
55 2