Spring Security 安全 百度百科html
功能:Spring Security對Web安全性的支持大量地依賴於Servlet過濾器。這些過濾器攔截進入請求,而且在應用程序處理該請求以前進行某些安全處理。 Spring Security提供有若干個過濾器,它們可以攔截Servlet請求,並將這些請求轉給認證和訪問決策管理器處理,從而加強安全性。根據本身的須要,可使用適當的過濾器來保護本身的應用程序。
若是使用過Servlet過濾器且令其正常工做,就必須在Web應用程序的web.xml文件中使用<filter> 和<filter-mapping>元素配置它們。雖然這樣作能起做用,可是它並不適用於使用依賴注入進行的配置。
FilterToBeanProxy是一個特殊的Servlet過濾器,它自己作的工做並很少,而是將本身的工做委託給Spring應用程序上下文 中的一個Bean來完成。被委託的Bean幾乎和其餘的Servlet過濾器同樣,實現javax.servlet.Filter接 口,但它是在Spring配置文件而不是web.xml文件中配置的。
實際上,FilterToBeanProxy代理給的那個Bean能夠是javax.servlet.Filter的任意實現。這能夠是 Spring Security的任何一個過濾器,或者它能夠是本身建立的一個過濾器。可是正如本書已經提到的那樣,Spring Security要求至少配置四個並且可能一打或者更多的過濾器。java
總而言之:Spring Security 安全將咱們的服務器保護起來,訪問任何資源都須要身份認證。配置filter,SpringBoot以及自動幫咱們配置好,咱們不用管,能夠把Spring Security理解爲一系列攔截器。git
整個項目基於github
JavaWeb-RESTful(二)_使用SpringMVC開發RESTful_下 傳送門web
系列博文spring
項目已上傳至guthub 傳送門數據庫
JavaWeb-SpringSecurity初認識 傳送門安全
JavaWeb-SpringSecurity在數據庫中查詢登錄用戶 傳送門服務器
JavaWeb-SpringSecurity自定義登錄頁面 傳送門app
JavaWeb-SpringSecurity實現需求-判斷請求是否以html結尾 傳送門
JavaWeb-SpringSecurity自定義登錄配置 傳送門
JavaWeb-SpringSecurity圖片驗證ImageCode 傳送門
JavaWeb-SpringSecurity記住我功能 傳送門
JavaWeb-SpringSecurity使用短信驗證碼登錄 傳送門
在GaryRESTful.config下建立java安全適配器類SecurityConfig.java
配置SecurityConfig.java
//表單驗證(身份認證) protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .and() //請求受權 .authorizeRequests() //全部請求都被攔截,跳轉到(/login請求中) .anyRequest() //都須要咱們身份認證 .authenticated(); }
package com.Gary.GaryRESTful.config; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; //Web應用安全適配器 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter{ //表單驗證(身份認證) protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .and() //請求受權 .authorizeRequests() //全部請求都被攔截,跳轉到(/login請求中) .anyRequest() //都須要咱們身份認證 .authenticated(); } }
spring Security 安全將咱們的服務器保護起來,訪問任何資源都須要身份認證,配置filter,SpringBoot以及自動幫咱們配置好,咱們不用管,能夠理解爲一系列的攔截器(filter)
若是要設置本身用戶登錄的帳號密碼時,Security5版本規定了不能使用明文作密碼
咱們可使用Security5自帶的PasswordEncoder作BCrypt加密設置
在SecurityConfig.java中配置加密規則
@Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); }
UserService中配置用戶登錄帳號密碼
@Autowired private PasswordEncoder passwordEncoder; //spring security默認處理登錄(username爲輸入的username) @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO Auto-generated method stub System.out.println(username); return new User(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); }
package com.Gary.GaryRESTful.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; //Web應用安全適配器 @Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter{ //告訴SpringSecurity密碼用什麼加密的 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } //表單驗證(身份認證) protected void configure(HttpSecurity http) throws Exception{ http.formLogin() .and() //請求受權 .authorizeRequests() //全部請求都被攔截,跳轉到(/login請求中) .anyRequest() //都須要咱們身份認證 .authenticated(); } }
package com.Gary.GaryRESTful.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Component; //用SprinSecurity默認的登錄系統 //UserService要實現UserDetailsService接口 @Component public class UserService implements UserDetailsService{ @Autowired private PasswordEncoder passwordEncoder; //spring security默認處理登錄(username爲輸入的username) @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { // TODO Auto-generated method stub System.out.println(username); //用戶名,密碼,權限 //User實現UserDetails接口 return new User(username,passwordEncoder.encode("123456"),AuthorityUtils.commaSeparatedStringToAuthorityList("admin")); } }