时间:2021-05-20
1. 新建SpringBoot工程
2. 项目依赖
<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. 定义登录成功处理器
4. 定义登录失败处理器新建一个类实现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 **/@Componentpublic class LoginErrorHandler implements AuthenticationFailureHandler{ @SneakyThrows @Override public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException authenticationException) throws IOException, ServletException { // 设置response缓冲区字符集 response.setCharacterEncoding("UTF-8"); // 定义一个JSONObject对象 JSONObject object = new JSONObject(); // 填写登录失败响应信息 object.put("code", -1); object.put("msg", "登录失败"); // 设置响应头 response.setContentType("application/json;charset=utf-8"); // 获得打印输出流 PrintWriter pw = response.getWriter(); // 向客户端写入一个字符串 pw.print(object.toString()); // 关闭流资源 pw.close(); }}5. 安全认证配置类
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 安全人认证配置类 * @author 周威 * @date 2020-09-03 13:42 **/@EnableWebSecuritypublic class SpringSecurityConfig extends WebSecurityConfigurerAdapter{ @Autowired private AuthenticationSuccessHandler loginSuccessHandler; @Autowired private AuthenticationFailureHandler loginErrorHandler; // 定义用户信息服务 @Bean @Override protected UserDetailsService userDetailsService() { InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager(); // 模拟两个用户身份 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(); } // 定义拦截机制 @Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // 设置哪些请求需要认证 .antMatchers("/**").authenticated() .and() // 启用表单登录认证 .formLogin() // 指定登录成功处理器 .successHandler(loginSuccessHandler) // 指定登录失败处理器 .failureHandler(loginErrorHandler); }}6. 项目运行测试
7. 登录成功测试
8. 登录失败测试
总结
到此这篇关于SpringSecurity自定义成功失败处理器的示例代码的文章就介绍到这了,更多相关SpringSecurity成功失败处理器内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了php实现session自定义会话处理器的方法。分享给大家供大家参考。具体分析如下:session自定义会话处理器,即就是说,所有关于sessio
1.概述在本快速教程中,我们将演示如何在SpringBoot应用程序中自定义SpringSecurity的身份验证失败处理。目标是使用表单登录方法对用户进行身份
我们就可以结合今天的AnnotationProcessingTool(APT)来自定义注解处理器。注解处理器简单解释就是收集我们标记的注解,处理注解上提供的信息
java自定义枚举转换器复制代码代码如下:importorg.apache.commons.beanutils.Converter;/***自定义枚举转换器**
一前言本篇是springSecurity知识的入门第二篇,主要内容是如何使用java配置的方式进行配置springSeciruty,然后通过一个简单的示例自定义