真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringBoot如何集成SpringSecurity

小編給大家分享一下SpringBoot如何集成Spring Security,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

創(chuàng)新互聯(lián)建站專注于定興網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供定興營(yíng)銷型網(wǎng)站建設(shè),定興網(wǎng)站制作、定興網(wǎng)頁設(shè)計(jì)、定興網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造定興網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供定興網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

一、前言

Spring SecurityApache Shiro 都是安全框架,為Java應(yīng)用程序提供身份認(rèn)證和授權(quán)。

二者區(qū)別
  1. Spring Security:量級(jí)安全框架

  2. Apache Shiro:量級(jí)安全框架

關(guān)于shiro的權(quán)限認(rèn)證與授權(quán)可參考小編的另外一篇文章 : SpringBoot集成Shiro 實(shí)現(xiàn)動(dòng)態(tài)加載權(quán)限

https://blog.csdn.net/qq_38225558/article/details/101616759

二、SpringBoot集成Spring Security入門體驗(yàn)

基本環(huán)境 : springboot 2.1.8
1、引入Spring Security依賴

    org.springframework.boot
    spring-boot-starter-security
2、新建一個(gè)controller測(cè)試訪問
@RestController
public class IndexController {
    @GetMapping("/index")
    public String index() {
        return "Hello World ~";
    }
}
3、運(yùn)行項(xiàng)目訪問 http://127.0.0.1:8080/index

溫馨小提示:在不進(jìn)行任何配置的情況下,Spring Security 給出的默認(rèn)用戶名為user 密碼則是項(xiàng)目在啟動(dòng)運(yùn)行時(shí)隨機(jī)生成的一串字符串,會(huì)打印在控制臺(tái),如下圖:
SpringBoot如何集成Spring Security
當(dāng)我們?cè)L問index首頁的時(shí)候,系統(tǒng)會(huì)默認(rèn)跳轉(zhuǎn)到login頁面進(jìn)行登錄認(rèn)證

SpringBoot如何集成Spring Security
認(rèn)證成功之后才會(huì)跳轉(zhuǎn)到我們的index頁面
SpringBoot如何集成Spring Security

三、Spring Security用戶密碼配置

除了上面Spring Security在不進(jìn)行任何配置下默認(rèn)給出的用戶user 密碼隨項(xiàng)目啟動(dòng)生成隨機(jī)字符串,我們還可以通過以下方式配置

1、springboot配置文件中配置
spring:
  security:
    user:
      name: admin  # 用戶名
      password: 123456  # 密碼
2、java代碼在內(nèi)存中配置

新建Security 核心配置類繼承WebSecurityConfigurerAdapter

@Configuration
@EnableWebSecurity // 啟用Spring Security的Web安全支持
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    /**
     * 將用戶設(shè)置在內(nèi)存中
     * @param auth
     * @throws Exception
     */
    @Autowired
    public void config(AuthenticationManagerBuilder auth) throws Exception {
        // 在內(nèi)存中配置用戶,配置多個(gè)用戶調(diào)用`and()`方法
        auth.inMemoryAuthentication()
                .passwordEncoder(passwordEncoder()) // 指定加密方式
                .withUser("admin").password(passwordEncoder().encode("123456")).roles("ADMIN")
                .and()
                .withUser("test").password(passwordEncoder().encode("123456")).roles("USER");
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        // BCryptPasswordEncoder:Spring Security 提供的加密工具,可快速實(shí)現(xiàn)加密加鹽
        return new BCryptPasswordEncoder();
    }

}
3、從數(shù)據(jù)庫中獲取用戶賬號(hào)、密碼信息

這種方式也就是我們項(xiàng)目中通常使用的方式,這個(gè)留到后面的文章再說

四、Spring Security 登錄處理 與 忽略攔截

相關(guān)代碼都有注釋相信很容易理解

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    /**
     * 登錄處理
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 開啟登錄配置
        http.authorizeRequests()
                // 標(biāo)識(shí)訪問 `/index` 這個(gè)接口,需要具備`ADMIN`角色
                .antMatchers("/index").hasRole("ADMIN")
                // 允許匿名的url - 可理解為放行接口 - 多個(gè)接口使用,分割
                .antMatchers("/", "/home").permitAll()
                // 其余所有請(qǐng)求都需要認(rèn)證
                .anyRequest().authenticated()
                .and()
                // 設(shè)置登錄認(rèn)證頁面
                .formLogin().loginPage("/login")
                // 登錄成功后的處理接口 - 方式①
                .loginProcessingUrl("/home")
                // 自定義登陸用戶名和密碼屬性名,默認(rèn)為 username和password
                .usernameParameter("username")
                .passwordParameter("password")
                // 登錄成功后的處理器  - 方式②
//                .successHandler((req, resp, authentication) -> {
//                    resp.setContentType("application/json;charset=utf-8");
//                    PrintWriter out = resp.getWriter();
//                    out.write("登錄成功...");
//                    out.flush();
//                })
                // 配置登錄失敗的回調(diào)
                .failureHandler((req, resp, exception) -> {
                    resp.setContentType("application/json;charset=utf-8");
                    PrintWriter out = resp.getWriter();
                    out.write("登錄失敗...");
                    out.flush();
                })
                .permitAll()//和表單登錄相關(guān)的接口統(tǒng)統(tǒng)都直接通過
                .and()
                .logout().logoutUrl("/logout")
                // 配置注銷成功的回調(diào)
                .logoutSuccessHandler((req, resp, authentication) -> {
                    resp.setContentType("application/json;charset=utf-8");
                    PrintWriter out = resp.getWriter();
                    out.write("注銷成功...");
                    out.flush();
                })
                .permitAll()
                .and()
                .httpBasic()
                .and()
                // 關(guān)閉CSRF跨域
                .csrf().disable();

    }

    /**
     * 忽略攔截
     * @param web
     * @throws Exception
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        // 設(shè)置攔截忽略u(píng)rl - 會(huì)直接過濾該url - 將不會(huì)經(jīng)過Spring Security過濾器鏈
        web.ignoring().antMatchers("/getUserInfo");
        // 設(shè)置攔截忽略文件夾,可以對(duì)靜態(tài)資源放行
        web.ignoring().antMatchers("/css/**", "/js/**");
    }

}

以上是“SpringBoot如何集成Spring Security”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


分享文章:SpringBoot如何集成SpringSecurity
分享網(wǎng)址:http://weahome.cn/article/pdoceo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部