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

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

admin7个月前 (04-15)数码66

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

本文将用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-释放数据传输潜力的数据压缩技术-微服务 (springboot启动)

Spring-释放数据传输潜力的数据压缩技术-微服务 (springboot启动)

简介 随着云原生架构的兴起,微服务已成为可扩展和可维护系统的重要构建块。顾名思义,微服务是小型的、独立的服务,它们共同构成一个完整的系统。当使用微服务构建系统时,尤其是那些具有大量数据交换的系统...

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

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

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

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

容器启动有效的交互-Spring-如何利用-框架提供的才干-让-Bean-深化了解并与-Spring (容器启动过程)

容器启动有效的交互-Spring-如何利用-框架提供的才干-让-Bean-深化了解并与-Spring (容器启动过程)

Spring有一个特点,就是创立进去的Bean对容器是无感的,一个Bean是怎样样被容器从一个Class整成一个Bean的,关于Bean自身来说是不知道的,当然也不须要知道,也就是Bean对容器的...

Boot中高效成功订单30分钟智能敞开的战略指南-Spring-源代码揭秘 (high boot)

Boot中高效成功订单30分钟智能敞开的战略指南-Spring-源代码揭秘 (high boot)

形式一:经常使用定时义务 代码成功如下: 首先,咱们定义一个实体类Order,蕴含基本信息以及订单的创立期间: @EntitypublicclassOrder{@Id@Generat...