SpringSecurity自定義成功失敗處理器的示例代碼
1. 新建SpringBoot工程
2. 項(xiàng)目依賴
<dependencies> <!-- security --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <!-- thymeleaf --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!-- web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- tomcat --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <!-- lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <!-- test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> </dependencies>
3. 定義登錄成功處理器
- 新建一個(gè)類實(shí)現(xiàn)AuthenticationSuccessHandler
- 重寫onAuthenticationSuccess方法
package zw.springboot.controller; import lombok.SneakyThrows; import org.json.JSONObject; import org.springframework.security.core.Authentication; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @className LoginSuccessHandler * @description 登錄成功處理器 * @author 周威 * @date 2020-09-03 13:50 **/ @Component public class LoginSuccessHandler implements AuthenticationSuccessHandler { @SneakyThrows @Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { // 設(shè)置response緩沖區(qū)字符集 response.setCharacterEncoding("UTF-8"); // 定義一個(gè)JSONObject對(duì)象 JSONObject object = new JSONObject(); // 填寫登錄成功響應(yīng)信息 object.put("code", 1); object.put("msg", "登錄成功"); // 設(shè)置響應(yīng)頭 response.setContentType("application/json;charset=utf-8"); // 獲得打印輸出流 PrintWriter pw = response.getWriter(); // 向客戶端寫入一個(gè)字符串 pw.print(object.toString()); // 關(guān)閉流資源 pw.close(); } }
4. 定義登錄失敗處理器新建一個(gè)類實(shí)現(xiàn)AuthenticationFailureHandler接口重寫onAuthenticationFailure方法
package zw.springboot.controller; import lombok.SneakyThrows; import org.json.JSONObject; import org.springframework.security.core.AuthenticationException; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.stereotype.Component; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; /** * @className LoginErrorHandler * @description 登錄失敗處理器 * @author 周威 * @date 2020-09-03 13:57 **/ @Component public class LoginErrorHandler implements AuthenticationFailureHandler { @SneakyThrows @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException { // 設(shè)置response緩沖區(qū)字符集 response.setCharacterEncoding("UTF-8"); // 定義一個(gè)JSONObject對(duì)象 JSONObject object = new JSONObject(); // 填寫登錄失敗響應(yīng)信息 object.put("code", -1); object.put("msg", "登錄失敗"); // 設(shè)置響應(yīng)頭 response.setContentType("application/json;charset=utf-8"); // 獲得打印輸出流 PrintWriter pw = response.getWriter(); // 向客戶端寫入一個(gè)字符串 pw.print(object.toString()); // 關(guān)閉流資源 pw.close(); } }
5. 安全認(rèn)證配置類
package zw.springboot.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.provisioning.InMemoryUserDetailsManager; import org.springframework.security.web.authentication.AuthenticationFailureHandler; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; /** * @className SpringSecurityConfig * @description 安全人認(rèn)證配置類 * @author 周威 * @date 2020-09-03 13:42 **/ @EnableWebSecurity public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private AuthenticationSuccessHandler loginSuccessHandler; @Autowired private AuthenticationFailureHandler loginErrorHandler; // 定義用戶信息服務(wù) @Bean @Override protected UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); // 模擬兩個(gè)用戶身份 manager.createUser(User.withUsername("admin").password(passwordEncoder().encode("123456")).authorities("p1").build()); manager.createUser(User.withUsername("user").password(passwordEncoder().encode("654321")).authorities("p2").build()); return manager; } // 定義密碼加密器 @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } // 定義攔截機(jī)制 @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // 設(shè)置哪些請(qǐng)求需要認(rèn)證 .antMatchers("/**").authenticated() .and() // 啟用表單登錄認(rèn)證 .formLogin() // 指定登錄成功處理器 .successHandler(loginSuccessHandler) // 指定登錄失敗處理器 .failureHandler(loginErrorHandler); } }
6. 項(xiàng)目運(yùn)行測(cè)試
7. 登錄成功測(cè)試
8. 登錄失敗測(cè)試
總結(jié)
到此這篇關(guān)于SpringSecurity自定義成功失敗處理器的示例代碼的文章就介紹到這了,更多相關(guān)SpringSecurity成功失敗處理器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Data JPA 關(guān)鍵字Exists的用法說(shuō)明
這篇文章主要介紹了Spring Data JPA 關(guān)鍵字Exists的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06RestTemplate發(fā)送HTTP?POST請(qǐng)求使用方法詳解
這篇文章主要為大家介紹了RestTemplate發(fā)送HTTP?POST請(qǐng)求的使用方法詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03java與JSON數(shù)據(jù)的轉(zhuǎn)換實(shí)例詳解
這篇文章主要介紹了java與JSON數(shù)據(jù)的轉(zhuǎn)換實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03編程語(yǔ)言榜單Java與Python并列第二!Julia下滑
日新月異的技術(shù)圈,隨著云、大數(shù)據(jù)、人工智能等主流技術(shù)的廣泛應(yīng)用,作為開發(fā)利器的編程語(yǔ)言的最新發(fā)展趨勢(shì)也在無(wú)形中發(fā)生了變化,本文主要介紹了java、Python、Julia等語(yǔ)言在Resmonk榜單的排名2021-08-08springboot 啟動(dòng)時(shí)初始化數(shù)據(jù)庫(kù)的步驟
這篇文章主要介紹了springboot 啟動(dòng)時(shí)初始化數(shù)據(jù)庫(kù)的步驟,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下2021-01-01解決IDEA誤刪out目錄下的文件導(dǎo)致404無(wú)法訪問(wèn)的問(wèn)題
這篇文章主要介紹了解決IDEA誤刪out目錄下的文件導(dǎo)致404無(wú)法訪問(wèn)的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02