国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot安全管理—Spring Security基本配置

這篇具有很好參考價(jià)值的文章主要介紹了Spring Boot安全管理—Spring Security基本配置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Spring Security的基本配置

1. 基本用法

1.1 創(chuàng)建項(xiàng)目,添加依賴

創(chuàng)建一個(gè)Spring Boot Web 項(xiàng)目,然后添加spring-boot-starter-security依賴。

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

1.2 添加hello接口

在項(xiàng)目中添加一個(gè)簡(jiǎn)單的/hello接口,內(nèi)容如下:

@RestController
public class HelloController {
   @GetMapping("/hello")
   public String hello(){
       return "Hello";
   }
}

1.3 啟動(dòng)項(xiàng)目測(cè)試

訪問/hello接口會(huì)自動(dòng)跳轉(zhuǎn)到登錄頁(yè)面,這個(gè)頁(yè)面有Spring Security提供的。
Spring Boot安全管理—Spring Security基本配置

默認(rèn)的用戶名是user,默認(rèn)的登錄密碼在每次啟動(dòng)項(xiàng)目隨機(jī)生成,查看項(xiàng)目日志:

Spring Boot安全管理—Spring Security基本配置

2. 配置用戶名和密碼

在application。properties中配置默認(rèn)的用戶名、密碼以及用戶角色。

spring.security.user.name=chen
spring.security.user.password=123456
spring.security.user.roles=admin

3. 基于內(nèi)存的認(rèn)證

開發(fā)者可以自定義類繼承WebSecurityConfigurerAdapter,進(jìn)而實(shí)現(xiàn)對(duì)Spring Security更多的自定義配置。例如基于內(nèi)存的認(rèn)證。

@Configuration
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {
    
    @Bean
    PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin").password("123456").roles("ADMIN","USER")
                .and()
                .withUser("chen").password("123456").roles("USER");
    }
}

代碼解釋:

  • 自定義MyWebSecurityConfig繼承WebSecurityConfigurerAdapter,并重寫configure(AuthenticationManagerBuilder auth)方法,在該方法中配直兩個(gè)用戶,一個(gè)用戶名是adnin ,密碼123456 ,具備兩個(gè)角色 ADMIN 和 USER;另一個(gè)用戶名是chen ,密碼是123456 ,具備一個(gè)角色 USER。

4. HttpSecurity

雖然現(xiàn)在可以實(shí)現(xiàn)認(rèn)證功能,但是受保護(hù)的資源都是默認(rèn)的,而且不能根據(jù)實(shí)際情況進(jìn)行角色管理。如果要實(shí)現(xiàn)這些功能,就需要重寫WebSecurityConfigurerAdapter中的另一個(gè)方法,代碼如下:

@Configuration
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin").password("123456").roles("ADMIN","USER")
                .and()
                .withUser("chen").password("123456").roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/admin/**")
                .hasRole("ADMIN")
                .antMatchers("/user/**")
                .access("hasAnyRole('ADMIN','USER')")
                .antMatchers("/db/**")
                .access("hasRole('admin') and hasRole('DBA')")
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .loginProcessingUrl("/login")
                .permitAll()
                .and()
                .csrf()
                .disable();
    }
}

配置完成后,接下來(lái)在Controller中添加如下接口進(jìn)行測(cè)試:

@RestController
public class HelloController {
    @GetMapping("/admin/hello")
    public String admin(){
        return "hello admin";
    }
    
    @GetMapping("/user/hello")
    public String user(){
        return "hello user";
    }
    
    @GetMapping("db/hello")
    public String dba(){
        return "hello dba";
    }
    
    @GetMapping("/hello")
    public String hello(){
        return "hello";
    }
}

"admin/hello"接口root和admin用戶具有訪問權(quán)限,“/user/hello”接口admin和chen用戶具有訪問權(quán)限,“/db/hello”只有root用戶具有訪問權(quán)限。

5. 登錄表單詳細(xì)配置

在前后端分離的開發(fā)方式中,前后端的數(shù)據(jù)交互通過(guò)JSON進(jìn)行,要實(shí)現(xiàn)這些功能,需要繼續(xù)完成上文配置。

@Configuration
public class MyWebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Bean
    PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin").password("123456").roles("ADMIN","USER")
                .and()
                .withUser("chen").password("123456").roles("USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/admin/**")
                .hasRole("ADMIN")
                .antMatchers("/user/**")
                .access("hasAnyRole('ADMIN','USER')")
                .antMatchers("/db/**")
                .access("hasRole('admin') and hasRole('DBA')")
                .anyRequest()
                .authenticated()
                .and()
                .formLogin()
                .loginPage("/login_page")
                .loginProcessingUrl("/login")
                .usernameParameter("name")
                .passwordParameter("passwd")
                .successHandler(new AuthenticationSuccessHandler() {
                    @Override
                    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                        Object principal = authentication.getPrincipal();
                        response.setContentType("application/json;charset=utf-8");
                        PrintWriter out = response.getWriter();
                        response.setStatus(200);
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("status",200);
                        map.put("msg",principal);
                        ObjectMapper om = new ObjectMapper();
                        out.write(om.writeValueAsString(map));
                        out.flush();
                        out.close();
                    }
                })
                .failureHandler(new AuthenticationFailureHandler() {
                    @Override
                    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException {
                        response.setContentType("application/json;charset=utf-8");
                        PrintWriter out = response.getWriter();
                        response.setStatus(401);
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("status",401);
                        if(e instanceof LockedException){
                            map.put("msg","賬戶被鎖定,登錄失敗");
                        }else if(e instanceof BadCredentialsException){
                            map.put("msg","賬戶或密碼輸入錯(cuò)誤,登錄失敗");
                        }else if (e instanceof DisabledException){
                            map.put("msg","賬戶被禁用,登錄失敗");
                        }else if(e instanceof AccountExpiredException){
                            map.put("msg","賬戶過(guò)期,登錄失敗");
                        }else if(e instanceof CredentialsExpiredException){
                            map.put("msg","密碼過(guò)期,登錄失敗");
                        }else {
                            map.put("msg","登錄失敗");
                        }
                       ObjectMapper om= new ObjectMapper();
                        out.write(om.writeValueAsString(map));
                        out.flush();
                        out.close();
                    }
                })
                .permitAll()
                .and();
    }
}

6. 注銷登錄

如果想要注銷登錄,也只需提供簡(jiǎn)單的配置即可。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-473939.html

      .and()
                .logout()
                .logoutUrl("/logout")
                .clearAuthentication(true)
                .addLogoutHandler(new LogoutHandler() {
                    @Override
                    public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication){
                       
                    }
                })
                .logoutSuccessHandler(new LogoutSuccessHandler() {
                    @Override
                    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
                        response.sendRedirect("/login_page");
                    }
                })
                .and();

到了這里,關(guān)于Spring Boot安全管理—Spring Security基本配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Boot 優(yōu)雅集成 Spring Security 5.7(安全框架)與 JWT(雙令牌機(jī)制)

    Spring Boot 優(yōu)雅集成 Spring Security 5.7(安全框架)與 JWT(雙令牌機(jī)制)

    本章節(jié)將介紹 Spring Boot 集成 Spring Security 5.7(安全框架)。 ?? Spring Boot 2.x 實(shí)踐案例(代碼倉(cāng)庫(kù)) Spring Security 是一個(gè)能夠?yàn)榛?Spring 的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。 它提供了一組可以在 Spring 應(yīng)用上下文中配置的 Bean,充分利用了 Spring

    2024年02月12日
    瀏覽(52)
  • 快速上手Spring Cloud 十一:微服務(wù)架構(gòu)下的安全與權(quán)限管理

    快速上手Spring Cloud 十一:微服務(wù)架構(gòu)下的安全與權(quán)限管理

    快速上手Spring Cloud 一:Spring Cloud 簡(jiǎn)介 快速上手Spring Cloud 二:核心組件解析 快速上手Spring Cloud 三:API網(wǎng)關(guān)深入探索與實(shí)戰(zhàn)應(yīng)用 快速上手Spring Cloud 四:微服務(wù)治理與安全 快速上手Spring Cloud 五:Spring Cloud與持續(xù)集成/持續(xù)部署(CI/CD) 快速上手Spring Cloud 六:容器化與微服務(wù)化

    2024年04月22日
    瀏覽(28)
  • spring boot中常用的安全框架 Security框架 利用Security框架實(shí)現(xiàn)用戶登錄驗(yàn)證token和用戶授權(quán)(接口權(quán)限控制)

    spring boot中常用的安全框架 Security框架 利用Security框架實(shí)現(xiàn)用戶登錄驗(yàn)證token和用戶授權(quán)(接口權(quán)限控制)

    spring boot中常用的安全框架 Security 和 Shiro 框架 Security 兩大核心功能 認(rèn)證 和 授權(quán) 重量級(jí) Shiro 輕量級(jí)框架 不限于web 開發(fā) 在不使用安全框架的時(shí)候 一般我們利用過(guò)濾器和 aop自己實(shí)現(xiàn) 權(quán)限驗(yàn)證 用戶登錄 Security 實(shí)現(xiàn)邏輯 輸入用戶名和密碼 提交 把提交用戶名和密碼封裝對(duì)象

    2024年02月06日
    瀏覽(31)
  • Spring Boot 3 + JWT + Security 聯(lián)手打造安全帝國(guó):一篇文章讓你掌握未來(lái)!

    Spring Boot 3 + JWT + Security 聯(lián)手打造安全帝國(guó):一篇文章讓你掌握未來(lái)!

    Spring Security 已經(jīng)成為 java 后臺(tái)權(quán)限校驗(yàn)的第一選擇.今天就通過(guò)讀代碼的方式帶大家深入了解一下Security,本文主要是基于開源項(xiàng)目spring-boot-3-jwt-security來(lái)講解Spring Security + JWT(Json Web Token).實(shí)現(xiàn)用戶鑒權(quán),以及權(quán)限校驗(yàn). 所有代碼基于 jdk17+ 構(gòu)建.現(xiàn)在讓我們開始吧! Springboot 3.0 Spri

    2024年02月07日
    瀏覽(89)
  • 云原生可觀察性的基本理念和方法論:可觀察性(Observability)是指系統(tǒng)內(nèi)部的運(yùn)行過(guò)程可以被檢測(cè)、分析、記錄和展示出來(lái),從而對(duì)系統(tǒng)行為、資源利用、健康狀況、安全情況等進(jìn)行監(jiān)控和管理

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 可觀察性(Observability)是指系統(tǒng)內(nèi)部的運(yùn)行過(guò)程可以被檢測(cè)、分析、記錄和展示出來(lái),從而對(duì)系統(tǒng)行為、資源利用、健康狀況、安全情況等進(jìn)行監(jiān)控和管理??捎^察性是云原生時(shí)代的一個(gè)重大發(fā)展方向,也是機(jī)器學(xué)習(xí)、微服務(wù)、容器技術(shù)、D

    2024年02月13日
    瀏覽(24)
  • Spring Boot開發(fā)Spring Security

    Spring Boot開發(fā)Spring Security

    ????????這里我對(duì)springboot不做過(guò)多描述,因?yàn)槲矣X得學(xué)這個(gè)的肯定掌握了springboot這些基礎(chǔ) Spring Security為我們提供了登錄頁(yè)面,這里我是將 \\\"/\\\",路徑設(shè)置為登陸頁(yè)面的路徑,方便測(cè)試, 也可以自定義登錄頁(yè)面,我會(huì)在后面說(shuō)明 ? ? ? ? 至于為什么不是yml,這完全不是這里

    2024年01月25日
    瀏覽(19)
  • Spring Boot 與 Spring Security

    Spring Security最初是由Ben Alex開發(fā)的,他是Acegi Security的創(chuàng)始人之一。Acegi Security是一個(gè)基于Spring框架的安全框架,它提供了一套完整的安全解決方案,包括認(rèn)證、授權(quán)、攻擊防護(hù)等功能,可以輕松地集成到Spring應(yīng)用程序中,保護(hù)應(yīng)用程序的安全性。 2008年,SpringSource收購(gòu)了Aceg

    2024年02月08日
    瀏覽(18)
  • Mikrotik Ros 安全基本配置

    Mikrotik Ros 安全基本配置

    基本概述 Mikrotik路由器是一種基于Linux內(nèi)核的網(wǎng)絡(luò)操作系統(tǒng),常用于構(gòu)建企業(yè)級(jí)網(wǎng)絡(luò)和個(gè)人網(wǎng)絡(luò)。為了確保網(wǎng)絡(luò)的安全性,對(duì)Mikrotik RouterOS進(jìn)行適當(dāng)?shù)陌踩庸淌侵陵P(guān)重要的。本文將介紹一些Mikrotik RouterOS的基本安全配置,以幫助您提高網(wǎng)絡(luò)的安全性。 Mikrotik系列路由器也成

    2024年02月04日
    瀏覽(18)
  • 安全生產(chǎn)管理平臺(tái)——革新傳統(tǒng)安全生產(chǎn)管理方式,重塑企業(yè)安全文化

    安全生產(chǎn)管理平臺(tái)——革新傳統(tǒng)安全生產(chǎn)管理方式,重塑企業(yè)安全文化

    安全生產(chǎn)管理在現(xiàn)代企業(yè)中占據(jù)著至關(guān)重要的地位。傳統(tǒng)的安全生產(chǎn)管理方式雖然在一定程度上能夠保障企業(yè)的生產(chǎn)安全,但隨著企業(yè)規(guī)模的不斷擴(kuò)大和生產(chǎn)環(huán)境的日益復(fù)雜,其局限性也愈發(fā)凸顯。而安全生產(chǎn)管理平臺(tái)的出現(xiàn),正是為了解決這一問題。 平臺(tái)功能與特點(diǎn) 安全

    2024年01月18日
    瀏覽(103)
  • 安全生產(chǎn)管理系統(tǒng)助力企業(yè)安全細(xì)化管理

    安全生產(chǎn)管理系統(tǒng)助力企業(yè)安全細(xì)化管理

    安全生產(chǎn)管理系統(tǒng)利用完整的安全生產(chǎn)管理體系,結(jié)合信息化、數(shù)字化和智能化等技術(shù)手段,將安全生產(chǎn)過(guò)程中的各個(gè)環(huán)節(jié)進(jìn)行有效整合,使安全管理更加科學(xué)、規(guī)范和高效。 安全生產(chǎn)管理系統(tǒng)可以對(duì)企業(yè)安全生產(chǎn)進(jìn)行全面、細(xì)致的管理。它能夠?qū)崿F(xiàn)對(duì)企業(yè)安全生產(chǎn)活動(dòng)的全

    2024年02月06日
    瀏覽(87)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包