0


Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全

文章目录

在这里插入图片描述

🎉Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全


  • ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
  • ✨博客主页:IT·陈寒的博客
  • 🎈该系列文章专栏:架构设计
  • 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
  • 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
  • 📜 欢迎大家关注! ❤️

Spring Security是保障Spring应用程序安全的强大框架,而新版的Spring Security引入了lambda表达式来配置,使得安全配置更加简洁、优雅。本文将介绍如何在Spring Boot项目中整合新版Spring Security,并通过lambda表达式进行安全配置,提供更好的开发体验。

1. 引言

Spring Security是一个用于身份验证和授权的框架,它提供了一套全面的安全服务,可轻松集成到Spring应用程序中。新版Spring Security引入了lambda表达式的配置方式,取代了之前的繁琐XML配置和方法调用链式配置,使得配置更加清晰、简洁。在这里插入图片描述

2. 项目依赖配置

首先,确保你的Spring Boot项目中包含了Spring Security的依赖。在

pom.xml

中添加以下依赖:

<!-- Spring Security --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>

3. 使用Lambda表达式配置Spring Security

在新版Spring Security中,使用lambda表达式配置可以显著提高配置的可读性和可维护性。以下是一个简单的例子,展示如何使用lambda表达式配置基本的身份验证和授权。

importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.security.config.annotation.web.builders.HttpSecurity;importorg.springframework.security.config.annotation.web.configuration.EnableWebSecurity;importorg.springframework.security.core.userdetails.User;importorg.springframework.security.core.userdetails.UserDetails;importorg.springframework.security.core.userdetails.UserDetailsService;importorg.springframework.security.core.userdetails.UsernameNotFoundException;importorg.springframework.security.provisioning.InMemoryUserDetailsManager;@Configuration@EnableWebSecuritypublicclassSecurityConfig{@BeanpublicUserDetailsServiceuserDetailsService(){UserDetails user =User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build();returnnewInMemoryUserDetailsManager(user);}@BeanpublicPasswordEncoderpasswordEncoder(){returnPasswordEncoderFactories.createDelegatingPasswordEncoder();}@ConfigurationpublicclassWebSecurityConfigextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{
            http
                .authorizeRequests().antMatchers("/","/home").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}}}

上述配置中,我们使用lambda表达式配置了一个简单的身份验证和授权。

userDetailsService

方法配置了一个内存中的用户,

configure

方法配置了访问权限和登录页面。

4. 自定义身份验证逻辑

在实际项目中,我们通常需要实现自定义的身份验证逻辑。通过lambda表达式,我们可以更清晰地定义自己的

UserDetailsService

AuthenticationProvider

@Configuration@EnableWebSecuritypublicclassCustomSecurityConfigextendsWebSecurityConfigurerAdapter{@AutowiredprivateCustomUserDetailsService customUserDetailsService;@Overrideprotectedvoidconfigure(AuthenticationManagerBuilder auth)throwsException{
        auth.authenticationProvider(authenticationProvider());}@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{
        http
            .authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@BeanpublicDaoAuthenticationProviderauthenticationProvider(){DaoAuthenticationProvider provider =newDaoAuthenticationProvider();
        provider.setUserDetailsService(customUserDetailsService);
        provider.setPasswordEncoder(passwordEncoder());return provider;}@BeanpublicPasswordEncoderpasswordEncoder(){returnPasswordEncoderFactories.createDelegatingPasswordEncoder();}}

在上述配置中,我们注入了一个自定义的

UserDetailsService

,并通过lambda表达式配置了

AuthenticationProvider

。这样我们可以更灵活地定义用户信息的获取和身份验证逻辑。

5. 认证与授权注解

新版Spring Security还引入了一系列基于注解的认证与授权。通过lambda表达式,我们可以更直观地配置这些注解。

5.1 @Secured注解

@Configuration@EnableWebSecuritypublicclassSecuredSecurityConfigextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{
        http
            .authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@Secured("ROLE_ADMIN")@GetMapping("/admin")publicStringadminPage(){return"admin";}}

在上述代码中,通过

@Secured("ROLE_ADMIN")

注解配置了访问路径

/admin

需要具备

ROLE_ADMIN

角色。

5.2 @PreAuthorize和@PostAuthorize注解

@Configuration@EnableWebSecuritypublicclassPrePostSecurityConfigextendsWebSecurityConfigurerAdapter{@Overrideprotectedvoidconfigure(HttpSecurity http)throwsException{
        http
            .authorizeRequests().antMatchers("/public/**").permitAll().anyRequest().authenticated().and().formLogin().loginPage("/login").permitAll().and().logout().permitAll();}@PreAuthorize("hasRole('ADMIN')")@GetMapping("/admin")publicStringadminPage(){return"admin";}@PostAuthorize("hasRole('USER')")@GetMapping("/user")publicStringuserPage(){return"user";}}

在上述代码中,通过

@PreAuthorize

@PostAuthorize

注解分别配置了方法的前置和后置授权规则。

6. 总结

通过本文的介绍,我们学习了如何在Spring Boot项目中整合新版Spring Security,并通过lambda表达式进行简洁、优雅的安全配置。新版Spring Security的引入使得配置更加直观,开发者可以更轻松地实现自定义的身份验证逻辑和授权规则。希望通过本文的学习,读者能够更加熟练地使用Spring Security保障应用程序的安全性。


🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:

  • 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
  • 【Java学习路线】2023年完整版Java学习路线图
  • 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
  • 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
  • 【数据结构学习】从零起步:学习数据结构的完整路径

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_43546721/article/details/136054719
版权归原作者 IT·陈寒 所有, 如有侵权,请联系我们删除。

“Spring Boot整合新版Spring Security:Lambda表达式配置优雅安全”的评论:

还没有评论