当前位置: 首页 > article >正文

springboot3.4.5-springsecurity+session

创建springboot项目,添加以下依赖:

  • Lombok
  • Spring Web
  • Spring Security
  • Spring Data JDBC
  • MyBatis Framework
  • MySQL Driver

添加fastjson2进行序列化和反序列化

        <dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.51</version></dependency>

创建一个用户实体类

@Data
public class SysUser {private Integer id;private String userName;private String password;private String email;
}

创建一个Mapper接口,用于查询用户数据

@Mapper
public interface SysUserMapper {@Select("select id,user_name,password,email from sys_user where user_name = #{text} or email = #{text}")SysUser findSysUserByNameOrEmail(String text);
}

自定义UserDetailsService,用于通过用户提交的信息,查询数据库的用户数据,并返回。

@Service
public class MyUserDetailsService implements UserDetailsService {@Resourceprivate SysUserMapper sysUserMapper;@Overridepublic UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {if(username==null){throw new UsernameNotFoundException("用户名不能为空");}SysUser sysUser = sysUserMapper.findSysUserByNameOrEmail(username);if(sysUser==null){throw new UsernameNotFoundException("用户名或密码错误");}return User.withUsername(sysUser.getUserName()).password(sysUser.getPassword()).build();}
}

创建一个过滤链,修改springsecurtiy的默认配置,使用自定义配置

@Configuration
public class SecurityConfig {@Resourceprivate MyUserDetailsService myUserDetailsService;@Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception {HttpSecurity chain = http.csrf(AbstractHttpConfigurer::disable);chain.authorizeHttpRequests(auth->auth.anyRequest().authenticated());chain.formLogin(form->form.loginProcessingUrl("/api/auth/login").successHandler(new MySuccessHandler()).failureHandler(new MyFailureHandler()));chain.userDetailsService(myUserDetailsService);chain.logout(logout->logout.logoutUrl("/api/auth/logout"));return chain.build();}
}

认证成功,返回信息定制,

public class MySuccessHandler implements AuthenticationSuccessHandler {@Overridepublic void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse res, Authentication auth) throws IOException, ServletException {res.setContentType("application/json;charset=utf-8");res.getWriter().write(JSONObject.toJSONString(Result.success("登录成功")));}
}

认证失败,返回信息定制,

public class MyFailureHandler implements AuthenticationFailureHandler {@Overridepublic void onAuthenticationFailure(HttpServletRequest req, HttpServletResponse res, AuthenticationException exception) throws IOException, ServletException {res.setContentType("application/json;charset=utf-8");res.getWriter().write(JSONObject.toJSONString(Result.failure(401,exception.getMessage())));}
}

http://www.lryc.cn/news/2383384.html

相关文章:

  • 网络安全利器:蜜罐技术详解
  • Leetcode百题斩-哈希
  • MySQL替换瀚高数据库报错: TO_DAYS()不存在(APP)
  • EXIST与JOIN连表比较
  • 【Linux】利用多路转接epoll机制、ET模式,基于Reactor设计模式实现
  • 【jvm第7集】jvm调优工具(命令行工具)
  • react中运行 npm run dev 报错,提示vite.config.js出现错误 @esbuild/win32-x64
  • 鸿蒙UI开发——Builder与LocalBuilder对比
  • 关于光谱相机的灵敏度
  • Model 速通系列(一)nanoGPT
  • 微信小程序中,一个页面的数据改变了,怎么通知另一个页面也改变?
  • MySQL--day4--排序与分页
  • 自动化测试脚本点击运行后,打开Chrome很久??
  • iOS热更新技术要点与风险分析
  • 系统架构设计(十二):统一过程模型(RUP)
  • 系分论文《论软件系统安全分析和应用》
  • Mac安装redis
  • srs-7.0 支持obs推webrtc流
  • Babylon.js学习之路《七、用户交互:鼠标点击、拖拽与射线检测》
  • 星际争霸小程序:用Java实现策略模式的星际大战
  • 请问交换机和路由器的区别?vlan 和 VPN 是什么?
  • BERT 作为Transformer的Encoder 为什么采用可学习的位置编码
  • Python数据可视化高级实战之一——绘制GE矩阵图
  • StreamSaver实现大文件下载解决方案
  • 【Vue 3全栈实战】从响应式原理到企业级架构设计
  • Java线程池调优与实践经验
  • 【科研项目】大三保研人科研经历提升
  • 期刊采编系统安装升级错误
  • CSS【详解】弹性布局 flex
  • 自回归图像编辑 EditAR: Unified Conditional Generation with Autoregressive Models