小編給大家分享一下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 Security
和 Apache Shiro
都是安全框架,為Java應(yīng)用程序提供身份認(rèn)證和授權(quán)。
Spring Security:重
量級(jí)安全框架
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
org.springframework.boot spring-boot-starter-security
@RestController public class IndexController { @GetMapping("/index") public String index() { return "Hello World ~"; } }
溫馨小提示:在不進(jìn)行任何配置的情況下,Spring Security 給出的默認(rèn)用戶名為user
密碼則是項(xiàng)目在啟動(dòng)運(yùn)行時(shí)隨機(jī)生成的一串字符串,會(huì)打印在控制臺(tái),如下圖:
當(dāng)我們?cè)L問index首頁的時(shí)候,系統(tǒng)會(huì)默認(rèn)跳轉(zhuǎn)到login頁面進(jìn)行登錄認(rèn)證
認(rèn)證成功之后才會(huì)跳轉(zhuǎn)到我們的index頁面
除了上面Spring Security在不進(jìn)行任何配置下默認(rèn)給出的用戶user
密碼隨項(xiàng)目啟動(dòng)生成隨機(jī)字符串,我們還可以通過以下方式配置
spring: security: user: name: admin # 用戶名 password: 123456 # 密碼
新建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(); } }
這種方式也就是我們項(xiàng)目中通常使用的方式,這個(gè)留到后面的文章再說
相關(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è)資訊頻道!