亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot如何集成Spring Security

發布時間:2021-11-23 11:11:57 來源:億速云 閱讀:140 作者:小新 欄目:編程語言

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

一、前言

Spring SecurityApache Shiro 都是安全框架,為Java應用程序提供身份認證和授權。

二者區別
  1. Spring Security:量級安全框架

  2. Apache Shiro:量級安全框架

關于shiro的權限認證與授權可參考小編的另外一篇文章 : SpringBoot集成Shiro 實現動態加載權限

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

二、SpringBoot集成Spring Security入門體驗

基本環境 : springboot 2.1.8
1、引入Spring Security依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
2、新建一個controller測試訪問
@RestController
public class IndexController {
    @GetMapping("/index")
    public String index() {
        return "Hello World ~";
    }
}
3、運行項目訪問 http://127.0.0.1:8080/index

溫馨小提示:在不進行任何配置的情況下,Spring Security 給出的默認用戶名為user 密碼則是項目在啟動運行時隨機生成的一串字符串,會打印在控制臺,如下圖:
SpringBoot如何集成Spring Security
當我們訪問index首頁的時候,系統會默認跳轉到login頁面進行登錄認證

SpringBoot如何集成Spring Security
認證成功之后才會跳轉到我們的index頁面
SpringBoot如何集成Spring Security

三、Spring Security用戶密碼配置

除了上面Spring Security在不進行任何配置下默認給出的用戶user 密碼隨項目啟動生成隨機字符串,我們還可以通過以下方式配置

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

新建Security 核心配置類繼承WebSecurityConfigurerAdapter

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

    /**
     * 將用戶設置在內存中
     * @param auth
     * @throws Exception
     */
    @Autowired
    public void config(AuthenticationManagerBuilder auth) throws Exception {
        // 在內存中配置用戶,配置多個用戶調用`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 提供的加密工具,可快速實現加密加鹽
        return new BCryptPasswordEncoder();
    }

}
3、從數據庫中獲取用戶賬號、密碼信息

這種方式也就是我們項目中通常使用的方式,這個留到后面的文章再說

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

相關代碼都有注釋相信很容易理解

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

    }

    /**
     * 忽略攔截
     * @param web
     * @throws Exception
     */
    @Override
    public void configure(WebSecurity web) throws Exception {
        // 設置攔截忽略url - 會直接過濾該url - 將不會經過Spring Security過濾器鏈
        web.ignoring().antMatchers("/getUserInfo");
        // 設置攔截忽略文件夾,可以對靜態資源放行
        web.ignoring().antMatchers("/css/**", "/js/**");
    }

}

以上是“SpringBoot如何集成Spring Security”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

侯马市| 张家川| 秦安县| 洛隆县| 耒阳市| 温州市| 雷山县| 阜平县| 舞钢市| 安顺市| 岐山县| 洮南市| 无为县| 吉木萨尔县| 郯城县| 洛川县| 都江堰市| 航空| 灵丘县| 建宁县| 三门峡市| 广饶县| 马龙县| 广河县| 九寨沟县| 嵩明县| 临泽县| 长丰县| 满城县| 广宁县| 锡林郭勒盟| 郸城县| 临城县| 安远县| 江山市| 马龙县| 石泉县| 满洲里市| 科技| 石景山区| 绿春县|