springboot-security認(rèn)證登錄 ?:以下是SecurityWebApplicationInitializer.java和SecurityConfig.java
package org.test.config;
importorg.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;
public class SecurityWebApplicationInitializer extends AbstractSecurityWebApplicationInitializer {}
package org.test.config;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.builders.WebSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import javax.sql.DataSource; /** * WebSecurityConfig只包含有關(guān)如何驗(yàn)證我們的用戶的信息 * 使用WebSecurityConfigurerAdapter時(shí),會(huì)自動(dòng)應(yīng)用注銷功能。 * 默認(rèn)情況下,訪問URL /logout將通過以下方式記錄用戶: * 使HTTP session無效 * 清除配置的任何RememberMe身份驗(yàn)證 * 清除 SecurityContextHolder * 跳轉(zhuǎn)至 /login?logout * 在沒有自定義登錄頁面之前,SpringSecurity會(huì)自動(dòng)生成登錄頁面 */ @Configuration // 聲明為配置類 @EnableWebSecurity// 啟用 Spring Security web 安全的功能
public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired DataSource dataSource; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { //暫時(shí)使用基于內(nèi)存的AuthenticationProvider auth.jdbcAuthentication().dataSource(dataSource) .usersByUsernameQuery("select user_name, user_pass, true from t_user where user_name=?") .authoritiesByUsernameQuery("select user_name, role from t_user where user_name=?") .passwordEncoder(new BCryptPasswordEncoder()); } @Override public void configure(WebSecurity web) throws Exception { // ingore是完全繞過了spring security的所有filter,相當(dāng)于不走spring security // 針對(duì) static 資源忽略認(rèn)證 web.ignoring().antMatchers("/static/**"); } /** * Spring Security知道我們要支持基于表單的身份驗(yàn)證?------- 驗(yàn)證請(qǐng)求 * 其原因是WebSecurityConfigurerAdapter在configure(HttpSecurity http)方法中提供了一個(gè)默認(rèn)配置 * 確保對(duì)我們的應(yīng)用程序的任何請(qǐng)求需要用戶進(jìn)行身份驗(yàn)證 * 允許用戶使用基于表單的登錄進(jìn)行身份驗(yàn)證 * 允許用戶使用HTTP Basic進(jìn)行身份驗(yàn)證 * * @param http * @throws Exception */ @Override protected void configure(HttpSecurity http) throws Exception { /** * 跨站點(diǎn)請(qǐng)求偽造(CSRF) CSRF令牌 WebSecurityConfigurerAdapter時(shí)的默認(rèn)構(gòu)造方法時(shí)CSRF是激活 * http.authorizeRequests()方法添加多個(gè)子節(jié)點(diǎn)來指定我們的URL的自定義要求 * http.authorizeRequests()方法有多個(gè)子節(jié)點(diǎn),每個(gè)匹配器都按它們聲明的順序考慮 * * WebSecurity主要是配置跟web資源相關(guān)的,比如css、js、images等等,但是這個(gè)還不是本質(zhì)的區(qū)別,關(guān)鍵的區(qū)別如下: ? ?? ?? ?* permitall沒有繞過spring security,其中包含了登錄的以及匿名的。 * */ //暫時(shí)禁用csrf,并自定義登錄頁和登出URL http.csrf().disable() // 禁用 Spring Security 自帶的csrf跨域處理 .authorizeRequests() //.anyRequest().permitAll(); // 允許所有請(qǐng)求通過 .anyRequest().authenticated() .and() .formLogin().and(); } }