最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
SpringSecurity自定义成功失败处理器代码示例
时间:2020-09-04 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下SpringSecurity自定义成功失败处理器代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
1. 新建SpringBoot工程
2. 项目依赖
org.springframework.boot spring-boot-starter-security org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.projectlombok lombok org.springframework.boot spring-boot-starter-test
3. 定义登录成功处理器
新建一个类实现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 { // 设置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(); } }
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 **/ @Component public 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 **/ @EnableWebSecurity public 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. 登录失败测试
相关文章
- SpringBoot自定义bean绑定解析 10-24
- Javaweb工程运行报错HTTP Status 404解决教程 10-20
- JAVA获取jvm和操作系统相关信息方法 10-20
- BeanFactory和FactoryBean的区别讲解 10-20
- 微信小程序的宿主环境实现教程 10-10
- dispatchEvent解决重叠元素响应事件教程 10-10