当前位置:首页 > 数码 > Security权限控制框架入门指南-Spring (security)

Security权限控制框架入门指南-Spring (security)

admin5个月前 (04-15)数码50

在罕用的后盾治理系统中,通常都会有访问权限控制的需求,用于限度不同人员关于接口的访问才干,假设用户不具有指定的权限,则不能访问某些接口。

本文将用waynboot-mall名目举例,给大家引见经常出现后管系统如何引入权限控制框架SpringSecurity。纲要如下:

waynboot-mall名目地址:

一、什么是SpringSecurity

SpringSecurity是一个基于Spring框架的开源名目,旨在为运行程序提供弱小和灵敏的安保性处置打算。SpringSecurity提供了以下特性:

二、如何引入SpringSecurity

在waynboot-mall名目中间接引入spring-boot-starter-security依赖,

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId><version>3.1.0</version></dependency></dependencies>

三、如何性能SpringSecurity

在SpringSecurity3.0中要性能SpringSecurity跟以往是有些不同的,比如不在承袭WebSecurityConfigurerAdapter。在waynboot-mall名目中,详细性能如下,

@Configuration@EnableWebSecurity@AllArgsConstructor@EnableMethodSecurity(securedEnabled=true,jsr250Enabled=true)publicclassSecurityConfig{privateUserDetlsServiceImpluserDetailsService;privateAuthenticationEntryPointImplunauthorizedHandler;privateJwtAuthenticationTokenFilterjwtAuthenticationTokenFilter;privateLogoutSuccessHandlerImpllogoutSuccessHandler;@BeanpublicSecurityFilterChainfilterChain(HttpSecurityhttpSecurity)throwsException{httpSecurity//cors启用.cors(httpSecurityCorsConfigurer->{}).csrf(AbstractHttpConfigurer::disable).sessionManagement(httpSecuritySessionManagementConfigurer->{httpSecuritySessionManagementConfigurer.sessionCreationPolicy(SessionCreationPolicy.STATELESS);}).exceptionHandling(httpSecurityExceptionHandlingConfigurer->{httpSecurityExceptionHandlingConfigurer.authenticationEntryPoint(unauthorizedHandler);})//过滤恳求.authorizeHttpRequests(authorizationManagerRequestMatcherRegistry->{authorizationManagerRequestMatcherRegistry.requestMatchers("/favicon.ico","/login","/favicon.ico","/actuator/**").anonymous().requestMatchers("/slider/**").anonymous().requestMatchers("/captcha/**").anonymous().requestMatchers("/upload/**").anonymous().requestMatchers("/common/download**").anonymous().requestMatchers("/doc.").anonymous().requestMatchers("/swagger-ui/**").anonymous().requestMatchers("/swagger-resources/**").anonymous().requestMatchers("/webjars/**").anonymous().requestMatchers("/*/api-docs").anonymous().requestMatchers("/druid/**").anonymous().requestMatchers("/elastic/**").anonymous().requestMatchers("/message/**").anonymous().requestMatchers("/ws/**").anonymous()//除下面外的一切恳求所有须要鉴权认证.anyRequest().authenticated();}).headers(httpSecurityHeadersConfigurer->{httpSecurityHeadersConfigurer.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable);});//处置跨域恳求中的Preflight恳求(cors),设置corsConfigurationSource后无需经常使用//.requestMatchers(CorsUtils::isPreFlightRequest).permitAll()//关于登录login验证码captchaImage准许匿名访问httpSecurity.logout(httpSecurityLogoutConfigurer->{httpSecurityLogoutConfigurer.logoutUrl("/logout");httpSecurityLogoutConfigurer.logoutSuccessHandler(logoutSuccessHandler);});//参与JWTfilterhttpSecurity.addFilterBefore(jwtAuthenticationTokenFilter,UsernamePassAuthenticationFilter.class);//认证用户时用户信息加载性能,注入springAuthUserServicehttpSecurity.userDetailsService(userDetailsService);returnhttpSecurity.build();}@BeanpublicAuthenticationManagerauthenticationManager(AuthenticationConfigurationauthenticationConfiguration)throwsException{returnauthenticationConfiguration.getAuthenticationManager();}/***强散列哈希加密成功*/@BeanpublicBCryptPasswordEncoderbCryptPasswordEncoder(){returnnewBCryptPasswordEncoder();}}
security

这里详细引见下SecurityConfig性能类:

四、如何经常使用SpringSecurity

要经常使用SpringSecurity,只要要在须要控制访问权限的方法或类上参与相应的@PreAuthorize注解即可,如下,

@Slf4j@RestController@AllArgsConstructor@RequestMing("system/role")publicclassRoleControllerextendsBaseController{privateIRoleServiceiRoleService;@PreAuthorize("@ss.hasPermi('system:role:list')")@GetMapping("/list")publicRlist(Rolerole){Page<Role>page=getPage();returnR.success().add("page",iRoleService.listPage(page,role));}}

咱们在list方法上加了@PreAuthorize("@ss.hasPermi('system:role:list')")注解示意以后登录用户领有system:role:list权限才干访问list方法,否则前往权限失误。

五、失掉以后登录用户权限

在SecurityConfig性能类中咱们定义了UserDetailsServiceImpl作为咱们的用户信息加载的成功类,从而经过读取数据库中用户的账号、明码与前端传入的账号、明码启动比对。代码如下,

@Slf4j@Service@AllArgsConstructorpublicclassUserDetailsServiceImplimplementsUserDetailsService{privateIUserServiceiUserService;privateIDeptServiceiDeptService;privatePermissionServicepermissionService;publicstaticvoidmain(String[]args){BCryptPasswordEncoderbCryptPasswordEncoder=newBCryptPasswordEncoder();System.out.println(bCryptPasswordEncoder.encode("123456"));}@OverridepublicUserDetailsloadUserByUsername(Stringusername)throwsUsernameNotFoundException{//1.读取数据库中以后用户信息Useruser=iUserService.getOne(newQueryWrapper<User>().eq("user_name",username));//2.判别该用户能否存在if(user==null){log.info("登录用户:{}不存在.",username);thrownewUsernameNotFoundException("登录用户:"+username+"不存在");}//3.判别能否禁用if(Objects.equals(UserStatusEnum.DISABLE.getCode(),user.getUserStatus())){log.info("登录用户:{}曾经被停用.",username);thrownewDisabledException("登录用户:"+username+"不存在");}user.setDept(iDeptService.getById(user.getDeptId()));//4.失掉以后用户的角色信息Set<String>rolePermission=permissionService.getRolePermission(user);//5.依据角色失掉权限信息Set<String>menuPermission=permissionService.getMenuPermission(rolePermission);returnnewLoginUserDetail(user,menuPermission);}}

针对UserDetailsServiceImpl的代码逻辑启动一个解说,大家可以配合代码了解。

总结一下

本文给大家解说了后管系统如何引入权限控制框架SpringSecurity3.0版本以及代码实战。置信能协助大家对权限控制框架SpringSecurity有一个明晰的了解。后续大家可以依照本文的经常使用指南一步一步将SpringSecurity引入到的自己的名目中用于访问权限控制。


「干货」SpringBoot+SpringSecurity+Jwt权限认证-认证

启动项目时,SpringBoot自动检索所有带@Configuration的注解,所以就将我们的WebSecurityConfig给加载了,这个config中,我们需要在configure(AuthenticationManagerBuilder auth)方法中注册一个继承自UserDetailsService的接口,这个接口中只有一个方法,那就是使用username获取到数据库中用户信息并返回成UserDetail实体。 这个方法需要我们按照我们的不同业务场景重写 WebSecurityConfig MyUserDetailsService 其实如果去掉上面的将自定义的JWT过滤器加入到过滤链中的话,这个认证过程已经完成了。 使用下面的代码就可以调用起整个认证程序。 核心代码 这一行就会将username和password放到认证程序中进行认证。 也就是需要我们自己的逻辑让他去触发这个代码的实现。 就可以自动完成认证程序了。 就会触发使用username获取到数据库用户信息,然后经过密码加密比对之后会将认证结果返回。 我们整合JWT其实也很简单,其实就是将JWT的登录部分的操作,使用过滤器封装,将该过滤器放到整个认证的过滤链中 SpringSecurity过滤器的配置无非以下几个条件 先解决逻辑上以上三个问题的答案 针对以上解答,下面用代码来做展示(ps:序号依次对应上面) 完成了以上的配置,前台就可以使用/login/user来进行登录操作了。 登录成功会返回一个JSON对象来供前端判断成功与否 全部代码奉上,随意写的注释有点多,不看的可以给删掉

SpringSecurity认证流程分析

要想分析SpringSecurity的认证流程,就一定要先了解整个SpringSecurity的工作流程,我们才能最终进行一些自定义操作。

Spring Security的web基础是Filters(过滤器) ,它是通过一层层的Filters来对web请求做处理的,每一个web请求会经过一条过滤器链,在这个过程中完成认证与授权。

其具体工作流程是这样的:

有了以上的一些基础了解后,我们来顺着源码流程走一边,理清整个认证的流程。

基于formLogin的流程分析,SpringSecurity默认也是formLogin。

以下源码我都将注释去掉,否则太长了!

【项目实践】一文带你搞定前后端分离下的认证和授权|Spring Security + JWT

SpringSecurity+JWT认证流程解析 | 掘金新人第一弹

SpringSecurit(小胖哥)

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: Spring

“Security权限控制框架入门指南-Spring (security)” 的相关文章

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

概念-Spring-AOP-实现原理和应用-中的 (概念股股票)

什么是AOP? AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,其主要目的是将横切关注点(cross-cutting concern)从主要业务...

如何在Spring名目中顺利性能MP-MyBatis (如何在springer上下载文献)

如何在Spring名目中顺利性能MP-MyBatis (如何在springer上下载文献)

在Spring名目中集成MP,须要启动以下性能: 1.引入依赖:在名目标pom.xml文件中参与MP相关依赖,例如:```xml<dependency><groupId&g...

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

比如每日有大量用户访问和数据替换-服务器的带宽需求与网站的访问量密切相关-那么就须要更大的带宽来满足需求-访问量-假设你的网站流量大 (比如每日有大事的句子)

SpringBeanDefinition元信息定义形式 BeanDefinition是一个蕴含Bean元数据的对象。它形容了如何创立Bean实例、Bean属性的值以及Bean之间的依赖相关。...

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

事务传播行为-Spring-七种类型一览 (spring事务传播行为)

简介 Spring 事务传播性是指在 Spring 环境中,当多个包含事务的方法嵌套调用时,每个事务方法如何处理事务上下文中的提交或回滚行为。 传播性行为 Spring 中定义了 7 种事...

b-b-核心原理拆解与源码分析-2.0-Spring-Boot-深度实践 (核心b类期刊有哪些)

b-b-核心原理拆解与源码分析-2.0-Spring-Boot-深度实践 (核心b类期刊有哪些)

SpringBoot是一个基于Spring的轻量级框架,它简化了Spring应用程序的创建过程,使得开发者能够快速搭建一个可运行的应用程序。随着SpringBoot2.0版本的发布,其功能和性能得...

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

Boot-Spring-与-3.0-加速应用性能的完美融合-GraalVM (bootstrap)

在 2023 年,SpringBoot 3.0 的发布标志着 Spring 框架对 GraalVM 的全面支持。此支持对 Spring 技术栈来说是一项重大补充。 GraalVM 概述...

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

6-Spring-提供的四种弱小工具-远程接口调用神器 (6sp日常使用还能用多久)

1.引见 Spring6是一个十分弱小的框架,它提供了许多工具和接口来简化远程接口调用。其中,WebClient、RestTemplate、HTTPInterface和RestClient是...