欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合新版SpringSecurity完整過程

 更新時間:2024年02月07日 09:04:29   作者:IT·陳寒  
Spring Security是保障Spring應(yīng)用程序安全的強(qiáng)大框架,而新版的Spring Security引入了lambda表達(dá)式來配置,使得安全配置更加簡潔、優(yōu)雅,本文將介紹如何在Spring Boot項目中整合新版Spring Security,需要的朋友可以參考下

1. 引言

Spring Security是一個用于身份驗證和授權(quán)的框架,它提供了一套全面的安全服務(wù),可輕松集成到Spring應(yīng)用程序中。新版Spring Security引入了lambda表達(dá)式的配置方式,取代了之前的繁瑣XML配置和方法調(diào)用鏈?zhǔn)脚渲茫沟门渲酶忧逦?、簡潔?/p>

2. 項目依賴配置

首先,確保你的Spring Boot項目中包含了Spring Security的依賴。在pom.xml中添加以下依賴:

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

3. 使用Lambda表達(dá)式配置Spring Security

在新版Spring Security中,使用lambda表達(dá)式配置可以顯著提高配置的可讀性和可維護(hù)性。以下是一個簡單的例子,展示如何使用lambda表達(dá)式配置基本的身份驗證和授權(quán)。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();

        return new InMemoryUserDetailsManager(user);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }

    @Configuration
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                    .antMatchers("/", "/home").permitAll()
                    .anyRequest().authenticated()
                    .and()
                .formLogin()
                    .loginPage("/login")
                    .permitAll()
                    .and()
                .logout()
                    .permitAll();
        }
    }
}

上述配置中,我們使用lambda表達(dá)式配置了一個簡單的身份驗證和授權(quán)。userDetailsService方法配置了一個內(nèi)存中的用戶,configure方法配置了訪問權(quán)限和登錄頁面。

4. 自定義身份驗證邏輯

在實際項目中,我們通常需要實現(xiàn)自定義的身份驗證邏輯。通過lambda表達(dá)式,我們可以更清晰地定義自己的UserDetailsServiceAuthenticationProvider。

@Configuration
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private CustomUserDetailsService customUserDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider provider = new DaoAuthenticationProvider();
        provider.setUserDetailsService(customUserDetailsService);
        provider.setPasswordEncoder(passwordEncoder());
        return provider;
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return PasswordEncoderFactories.createDelegatingPasswordEncoder();
    }
}

在上述配置中,我們注入了一個自定義的UserDetailsService,并通過lambda表達(dá)式配置了AuthenticationProvider。這樣我們可以更靈活地定義用戶信息的獲取和身份驗證邏輯。

5. 認(rèn)證與授權(quán)注解

新版Spring Security還引入了一系列基于注解的認(rèn)證與授權(quán)。通過lambda表達(dá)式,我們可以更直觀地配置這些注解。

5.1 @Secured注解

@Configuration
@EnableWebSecurity
public class SecuredSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @Secured("ROLE_ADMIN")
    @GetMapping("/admin")
    public String adminPage() {
        return "admin";
    }
}

在上述代碼中,通過@Secured("ROLE_ADMIN")注解配置了訪問路徑/admin需要具備ROLE_ADMIN角色。

5.2 @PreAuthorize和@PostAuthorize注解

@Configuration
@EnableWebSecurity
public class PrePostSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }

    @PreAuthorize("hasRole('ADMIN')")
    @GetMapping("/admin")
    public String adminPage() {
        return "admin";
    }

    @PostAuthorize("hasRole('USER')")
    @GetMapping("/user")
    public String userPage() {
        return "user";
    }
}

在上述代碼中,通過@PreAuthorize@PostAuthorize注解分別配置了方法的前置和后置授權(quán)規(guī)則。

6. 總結(jié)

通過本文的介紹,我們學(xué)習(xí)了如何在Spring Boot項目中整合新版Spring Security,并通過lambda表達(dá)式進(jìn)行簡潔、優(yōu)雅的安全配置。新版Spring Security的引入使得配置更加直觀,開發(fā)者可以更輕松地實現(xiàn)自定義的身份驗證邏輯和授權(quán)規(guī)則。希望通過本文的學(xué)習(xí),讀者能夠更加熟練地使用Spring Security保障應(yīng)用程序的安全性。

以上就是SpringBoot整合新版SpringSecurity完整過程的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合SpringSecurity的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java使用設(shè)計模式中的代理模式構(gòu)建項目的實例展示

    Java使用設(shè)計模式中的代理模式構(gòu)建項目的實例展示

    這篇文章主要介紹了Java使用設(shè)計模式中的代理模式構(gòu)建項目的實例展示,代理模式中的代理對象可以在客戶端和目標(biāo)對象之間起到中介的作用,需要的朋友可以參考下
    2016-05-05
  • 基于Java SSM實現(xiàn)在線點餐系統(tǒng)

    基于Java SSM實現(xiàn)在線點餐系統(tǒng)

    本項目基于Java SSM框架實現(xiàn)在線點餐系統(tǒng),主要實現(xiàn)系統(tǒng)的在線點餐功能。文中的示例代碼講解詳細(xì),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2022-02-02
  • Java正則驗證字串符RegexValidator類使用

    Java正則驗證字串符RegexValidator類使用

    正則驗證字串符是一種強(qiáng)大的工具,可以幫助程序員在處理字符串時輕松進(jìn)行復(fù)雜匹配,本文將介紹正則表達(dá)式的概念、語法和在編程中的應(yīng)用,并通過實例演示如何使用正則表達(dá)式進(jìn)行字符串匹配、替換和提取等操作
    2023-11-11
  • java如何將一個float型數(shù)的整數(shù)部分和小數(shù)分別輸出顯示

    java如何將一個float型數(shù)的整數(shù)部分和小數(shù)分別輸出顯示

    這篇文章主要介紹了java如何將一個float型數(shù)的整數(shù)部分和小數(shù)分別輸出顯示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • java對象和json的來回轉(zhuǎn)換知識點總結(jié)

    java對象和json的來回轉(zhuǎn)換知識點總結(jié)

    在本篇文章里小編給大家分享了一篇關(guān)于java對象和json的來回轉(zhuǎn)換知識點總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • spring 使用RabbitMQ進(jìn)行消息傳遞的示例代碼

    spring 使用RabbitMQ進(jìn)行消息傳遞的示例代碼

    這篇文章主要介紹了spring 使用RabbitMQ進(jìn)行消息傳遞的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • mybatisplus報錯:Invalid bound statement(not found)問題及解決

    mybatisplus報錯:Invalid bound statement(not fou

    文章主要介紹了在使用MyBatis-Plus時遇到的`Invalid bound statement (not found)`錯誤的幾種常見原因和解決方法,包括namespace路徑不一致、函數(shù)名或標(biāo)簽id不一致、構(gòu)建未成功、掃包配置錯誤以及配置文件書寫錯誤
    2025-02-02
  • SpringBoot系列教程之dubbo和Zookeeper集成方法

    SpringBoot系列教程之dubbo和Zookeeper集成方法

    這篇文章主要介紹了SpringBoot系列教程之dubbo和Zookeeper集成方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot+MyBatis整合ClickHouse實踐記錄

    SpringBoot+MyBatis整合ClickHouse實踐記錄

    本文介紹了如何使用SpringBoot、MyBatis和ClickHouse整合,包括添加依賴、配置數(shù)據(jù)源、創(chuàng)建實體類、Mapper接口、服務(wù)層和控制器的步驟,通過這些步驟,可以使Java應(yīng)用程序高效地與ClickHouse數(shù)據(jù)庫進(jìn)行交互,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java 改造ayui表格組件實現(xiàn)多重排序

    Java 改造ayui表格組件實現(xiàn)多重排序

    layui 的表格組件目前只支持單列排序,在實際應(yīng)用中并不能很好的支撐我們的業(yè)務(wù)需求。今天一時手癢,決定改造一番以支持多重排序。
    2021-04-04

最新評論