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

相关文章
|
10天前
|
安全 数据安全/隐私保护
Springboot+Spring security +jwt认证+动态授权
Springboot+Spring security +jwt认证+动态授权
|
28天前
|
小程序 Java
基于springboot的医护人员排班系统
基于springboot的医护人员排班系统
26 0
|
1天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
19 6
|
2天前
|
安全 Java 数据安全/隐私保护
使用Spring Security进行Java身份验证与授权
【4月更文挑战第16天】Spring Security是Java应用的安全框架,提供认证和授权解决方案。通过添加相关依赖到`pom.xml`,然后配置`SecurityConfig`,如设置用户认证信息和URL访问规则,可以实现应用的安全保护。认证流程包括请求拦截、身份验证、响应生成和访问控制。授权则涉及访问决策管理器,如基于角色的投票。Spring Security为开发者构建安全应用提供了全面且灵活的工具,涵盖OAuth2、CSRF保护等功能。
|
4天前
|
安全 前端开发 Java
Spring Security的授权管理器实现
Spring Security的授权管理器涉及用户登录后的token验证和权限检查。当用户携带token访问时,框架会验证token合法性及用户访问权限。自定义授权管理器`TokenAuthorizationManager`需实现`AuthorizationManager<RequestAuthorizationContext>`接口,处理校验逻辑,包括解析token、判断用户角色与访问资源的匹配。配置中在`SecurityConfig`注册该管理器以生效。测试表明,具有不同角色的用户可访问相应权限的资源,否则返回403错误。
112 4
|
4天前
|
安全 Java Spring
Spring Security的授权&鉴权
该文档介绍了授权和鉴权的概念,主要分为Web授权和方法授权。Web授权通过URL拦截进行,而方法授权利用注解控制权限,粒度更细但耦合度高。在Web授权的案例中,展示了如何在Spring Security中对特定URL设置角色控制。此外,还列举了Spring Security内置的控制操作方法,如permitAll()、denyAll()和hasRole()等,用于定义不同类型的用户访问权限。
104 7
|
9天前
|
安全 Java 数据库
Spring Security加密解密
Spring Security加密解密
|
10天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
12 0
|
20天前
|
缓存 NoSQL Java
手撸的 SpringBoot缓存系统,性能杠杠的
手撸的 SpringBoot缓存系统,性能杠杠的
27 0
|
27天前
|
前端开发 druid Java
基于SpringBoot+Layui的社区物业管理系统
社区物业管理系统是基于java程序开发,本系统分为业主和管理员两个角色 业主可以登陆系统,查看车位费用信息,查看物业费用信息,在线投诉,查看投诉,在线报修; 管理员可以车位收费信息,物业收费信息,投诉信息,楼宇信息,房屋信息,业主信息,车位信息,抄表信息等进行管理。
29 0
基于SpringBoot+Layui的社区物业管理系统

热门文章

最新文章