springboot-security認證登錄 ?:以下是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)如何驗證我們的用戶的信息 * 使用WebSecurityConfigurerAdapter時,會自動應(yīng)用注銷功能树绩。 * 默認情況下秕衙,訪問URL /logout將通過以下方式記錄用戶: * 使HTTP session無效 * 清除配置的任何RememberMe身份驗證 * 清除 SecurityContextHolder * 跳轉(zhuǎn)至 /login?logout * 在沒有自定義登錄頁面之前亥宿,SpringSecurity會自動生成登錄頁面 */ @Configuration // 聲明為配置類 @EnableWebSecurity// 啟用 Spring Security web 安全的功能
public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired DataSource dataSource; @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { //暫時使用基于內(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缀雳,相當于不走spring security // 針對 static 資源忽略認證 web.ignoring().antMatchers("/static/**"); } /** * Spring Security知道我們要支持基于表單的身份驗證?------- 驗證請求 * 其原因是WebSecurityConfigurerAdapter在configure(HttpSecurity http)方法中提供了一個默認配置 * 確保對我們的應(yīng)用程序的任何請求需要用戶進行身份驗證 * 允許用戶使用基于表單的登錄進行身份驗證 * 允許用戶使用HTTP Basic進行身份驗證 * * @param http * @throws Exception */ @Override protected void configure(HttpSecurity http) throws Exception { /** * 跨站點請求偽造(CSRF) CSRF令牌 WebSecurityConfigurerAdapter時的默認構(gòu)造方法時CSRF是激活 * http.authorizeRequests()方法添加多個子節(jié)點來指定我們的URL的自定義要求 * http.authorizeRequests()方法有多個子節(jié)點,每個匹配器都按它們聲明的順序考慮 * * WebSecurity主要是配置跟web資源相關(guān)的,比如css拗盒、js、images等等剩晴,但是這個還不是本質(zhì)的區(qū)別锣咒,關(guān)鍵的區(qū)別如下: ? ?? ?? ?* permitall沒有繞過spring security侵状,其中包含了登錄的以及匿名的赞弥。 * */ //暫時禁用csrf,并自定義登錄頁和登出URL http.csrf().disable() // 禁用 Spring Security 自帶的csrf跨域處理 .authorizeRequests() //.anyRequest().permitAll(); // 允許所有請求通過 .anyRequest().authenticated() .and() .formLogin().and(); } }